Clover Coverage Report - Pebble 2.5-SNAPSHOT
Coverage timestamp: Sat Jun 12 2010 09:39:29 EST
../../../../../img/srcFileCovDistChart5.png 38% of files have more coverage
79   181   29   15,8
32   138   0,37   5
5     5,8  
1    
This report was generated with an evaluation server license. Purchase Clover or configure your license.
 
  AbstractCommentAction       Line # 31 79 0% 29 58 50% 0.5
 
  (12)
 
1    package net.sourceforge.pebble.web.action;
2   
3    import java.io.UnsupportedEncodingException;
4    import java.net.URLDecoder;
5    import java.net.URLEncoder;
6   
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  8 toggle protected Comment createComment(HttpServletRequest request, BlogEntry blogEntry) {
36  8 String author = StringUtils.transformHTML(request.getParameter("author"));
37  8 String email = request.getParameter("email");
38  8 String website = request.getParameter("website");
39  8 String ipAddress = request.getRemoteAddr();
40  8 String title = StringUtils.transformHTML(request.getParameter("title"));
41  8 String body = request.getParameter("commentBody");
42   
43  8 Comment comment = blogEntry.createComment(title, body, author, email, website, ipAddress);
44   
45    // if the user is authenticated, overwrite the author information
46  8 if (SecurityUtils.isUserAuthenticated()) {
47  8 PebbleUserDetails user = SecurityUtils.getUserDetails();
48  8 if (user != null) {
49  0 comment.setAuthor(user.getName());
50  0 comment.setEmail(user.getEmailAddress());
51  0 if (user.getWebsite() != null && !user.getWebsite().equals("")) {
52  0 comment.setWebsite(user.getWebsite());
53    } else {
54  0 comment.setWebsite(blogEntry.getBlog().getUrl() + "authors/" + user.getUsername() + "/");
55    }
56  0 comment.setAuthenticated(true);
57    }
58    }
59   
60    // are we replying to an existing comment?
61  8 String parentCommentId = request.getParameter("comment");
62  8 if (parentCommentId != null && parentCommentId.length() > 0) {
63  4 long parent = Long.parseLong(parentCommentId);
64  4 Comment parentComment = blogEntry.getComment(parent);
65  4 if (parentComment != null) {
66  2 comment.setParent(parentComment);
67    }
68    }
69   
70  8 return comment;
71    }
72   
 
73  4 toggle protected Comment createBlankComment(Blog blog, BlogEntry blogEntry, HttpServletRequest request) {
74  4 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  4 if (SecurityUtils.isUserAuthenticated()) {
80  2 PebbleUserDetails user = SecurityUtils.getUserDetails();
81  2 if (user != null) {
82  0 comment.setAuthor(user.getName());
83  0 comment.setEmail(user.getEmailAddress());
84  0 if (user.getWebsite() != null && !user.getWebsite().equals("")) {
85  0 comment.setWebsite(user.getWebsite());
86    } else {
87  0 comment.setWebsite(blogEntry.getBlog().getUrl() + "authors/" + user.getUsername() + "/");
88    }
89  0 comment.setAuthenticated(true);
90    }
91    } else {
92  2 try {
93    // is "remember me" set?
94  2 Cookie rememberMe = CookieUtils.getCookie(request.getCookies(), "rememberMe");
95  2 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  0 Cookie author = CookieUtils.getCookie(request.getCookies(), "rememberMe.author");
99  0 if (author != null) {
100  0 comment.setAuthor(URLDecoder.decode(author.getValue(), blog.getCharacterEncoding()));
101    }
102   
103  0 Cookie email = CookieUtils.getCookie(request.getCookies(), "rememberMe.email");
104  0 if (email != null) {
105  0 comment.setEmail(URLDecoder.decode(email.getValue(), blog.getCharacterEncoding()));
106    }
107   
108  0 Cookie website = CookieUtils.getCookie(request.getCookies(), "rememberMe.website");
109  0 if (website != null) {
110  0 comment.setWebsite(URLDecoder.decode(website.getValue(), blog.getCharacterEncoding()));
111    }
112    }
113    } catch (UnsupportedEncodingException e) {
114  0 log.error(e);
115    }
116    }
117   
118    // are we replying to an existing comment?
119  4 String parentCommentId = request.getParameter("comment");
120  4 if (parentCommentId != null && parentCommentId.length() > 0) {
121  0 long parent = Long.parseLong(parentCommentId);
122  0 Comment parentComment = blogEntry.getComment(parent);
123  0 if (parentComment != null) {
124  0 comment.setParent(parentComment);
125  0 comment.setTitle(parentComment.getTitle());
126    }
127    }
128   
129  4 return comment;
130    }
131   
 
132  8 toggle protected ValidationContext validateComment(Comment comment) {
133  8 ValidationContext context = new ValidationContext();
134  8 try {
135  8 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  8 getModel().put("validationContext", context);
143  8 return context;
144    }
145   
 
146  6 toggle protected void saveComment(HttpServletRequest request, HttpServletResponse response, BlogEntry blogEntry, Comment comment) throws BlogServiceException {
147  6 Blog blog = blogEntry.getBlog();
148  6 blogEntry.addComment(comment);
149   
150  6 BlogService service = new BlogService();
151  6 service.putBlogEntry(blogEntry);
152   
153    // remember me functionality
154  6 String rememberMe = (String)request.getSession().getAttribute("rememberMe");
155  6 if (rememberMe != null && rememberMe.equals("true")) {
156  0 CookieUtils.addCookie(response, "rememberMe", "true", CookieUtils.ONE_MONTH);
157  0 CookieUtils.addCookie(response, "rememberMe.author", encode(comment.getAuthor(), blog.getCharacterEncoding()), CookieUtils.ONE_MONTH);
158  0 CookieUtils.addCookie(response, "rememberMe.email", encode(comment.getEmail(), blog.getCharacterEncoding()), CookieUtils.ONE_MONTH);
159  0 CookieUtils.addCookie(response, "rememberMe.website", encode(comment.getWebsite(), blog.getCharacterEncoding()), CookieUtils.ONE_MONTH);
160    } else {
161  6 CookieUtils.removeCookie(response, "rememberMe");
162  6 CookieUtils.removeCookie(response, "rememberMe.author");
163  6 CookieUtils.removeCookie(response, "rememberMe.email");
164  6 CookieUtils.removeCookie(response, "rememberMe.website");
165    }
166    }
167   
 
168  0 toggle private String encode(String s, String characterEncoding) {
169  0 if (s == null) {
170  0 return "";
171    } else {
172  0 try {
173  0 return URLEncoder.encode(s, characterEncoding);
174    } catch (UnsupportedEncodingException e) {
175  0 log.error(e);
176  0 return "";
177    }
178    }
179    }
180   
181    }