File Source: savecommentaction.java
/*
P/P * Method: net.sourceforge.pebble.web.action.SaveCommentAction__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.action;
33
/*
P/P * Method: void net.sourceforge.pebble.web.action.SaveCommentAction()
*/
34 import javax.servlet.ServletException;
35 import javax.servlet.ServletRequest;
36 import javax.servlet.http.HttpServletRequest;
37 import javax.servlet.http.HttpServletResponse;
38
39 import net.sourceforge.pebble.Constants;
40 import net.sourceforge.pebble.api.confirmation.CommentConfirmationStrategy;
41 import net.sourceforge.pebble.api.decorator.ContentDecoratorContext;
42 import net.sourceforge.pebble.domain.Blog;
43 import net.sourceforge.pebble.domain.BlogEntry;
44 import net.sourceforge.pebble.domain.BlogService;
45 import net.sourceforge.pebble.domain.BlogServiceException;
46 import net.sourceforge.pebble.domain.Comment;
47 import net.sourceforge.pebble.util.I18n;
48 import net.sourceforge.pebble.web.security.RequireSecurityToken;
49 import net.sourceforge.pebble.web.validation.ValidationContext;
50 import net.sourceforge.pebble.web.view.NotFoundView;
51 import net.sourceforge.pebble.web.view.View;
52 import net.sourceforge.pebble.web.view.impl.CommentConfirmationView;
53 import net.sourceforge.pebble.web.view.impl.CommentFormView;
54 import net.sourceforge.pebble.web.view.impl.ConfirmCommentView;
55
56 import org.apache.commons.logging.Log;
57 import org.apache.commons.logging.LogFactory;
58
59 /**
60 * Adds a comment to an existing blog entry.
61 *
62 * @author Simon Brown
63 */
64 @RequireSecurityToken
65 public class SaveCommentAction extends AbstractCommentAction {
66
67 /** the log used by this class */
68 private static Log log = LogFactory.getLog(SaveCommentAction.class);
69
70 /**
71 * Peforms the processing associated with this action.
72 *
73 * @param request the HttpServletRequest instance
74 * @param response the HttpServletResponse instance
75 * @return the name of the next view
76 */
77 public View process(HttpServletRequest request, HttpServletResponse response) throws ServletException {
/*
P/P * Method: View process(HttpServletRequest, HttpServletResponse)
*
* Preconditions:
* request != null
* this.model != null
* this.model.data != null
* (soft) log != null
* (soft) net.sourceforge.pebble.PebbleContext__static_init.new PebbleContext(PebbleContext__static_init#1).configuration != null
*
* Presumptions:
* java.util.HashMap:get(...)@63 != null
* javax.servlet.http.HttpServletRequest:getSession(...)@118 != null
* javax.servlet.http.HttpServletRequest:getSession(...)@126 != null
* javax.servlet.http.HttpServletRequest:getSession(...)@134 != null
* net.sourceforge.pebble.domain.Blog:getCommentConfirmationStrategy(...)@123 != null
* ...
*
* Postconditions:
* return_value in Addr_Set{&new CommentConfirmationView(process#9),&new ConfirmCommentView(process#8),&new CommentFormView(process#7),&new CommentConfirmationView(process#5),&new NotFoundView(process#4)}
* new CommentConfirmationView(process#5) num objects <= 1
* new CommentConfirmationView(process#9) num objects <= 1
* new CommentFormView(process#7) num objects <= 1
* new ConfirmCommentView(process#8) num objects <= 1
* new NotFoundView(process#4) num objects <= 1
*
* Test Vectors:
* java.lang.String:equalsIgnoreCase(...)@120: {1}, {0}
* javax.servlet.http.HttpServletRequest:getParameter(...)@84: Addr_Set{null}, Inverse{null}
* net.sourceforge.pebble.api.confirmation.CommentConfirmationStrategy:confirmationRequired(...)@128: {0}, {1}
* net.sourceforge.pebble.domain.BlogEntry:isCommentsEnabled(...)@97: {1}, {0}
* net.sourceforge.pebble.domain.BlogService:getBlogEntry(...)@88: Inverse{null}, Addr_Set{null}
*/
78 Blog blog = (Blog)getModel().get(Constants.BLOG_KEY);
79 BlogEntry blogEntry;
80 Comment comment;
81
82 String entry = request.getParameter("entry");
83 String rememberMe = request.getParameter("rememberMe");
84 String submitType = request.getParameter("submit");
85
86 BlogService service = new BlogService();
87 try {
88 blogEntry = service.getBlogEntry(blog, entry);
89 } catch (BlogServiceException e) {
90 throw new ServletException(e);
91 }
92 if (blogEntry == null) {
93 // just send back a 404 - this is probably somebody looking for a way
94 // to send comment spam ;-)
95 log.info("ignoring saveComment with no related blog entry (spam) from " + request.getRemoteAddr());
96 return new NotFoundView();
97 } else if (!blogEntry.isCommentsEnabled()) {
98 return new CommentConfirmationView();
99 }
100
101 comment = createComment(request, blogEntry);
102 ValidationContext context = validateComment(comment);
103
104 // are we previewing or adding the comment?
105 String previewButton = I18n.getMessage(blog, "comment.previewButton");
106
107 ContentDecoratorContext decoratorContext = new ContentDecoratorContext();
108 decoratorContext.setView(ContentDecoratorContext.DETAIL_VIEW);
109 decoratorContext.setMedia(ContentDecoratorContext.HTML_PAGE);
110
111 Comment decoratedComment = (Comment)comment.clone();
112 blog.getContentDecoratorChain().decorate(decoratorContext, decoratedComment);
113 getModel().put("decoratedComment", decoratedComment);
114 getModel().put("undecoratedComment", comment);
115 getModel().put("rememberMe", rememberMe);
116 getModel().put(Constants.BLOG_ENTRY_KEY, blogEntry);
117 getModel().put(Constants.COMMENT_KEY, comment);
118 ((ServletRequest) request.getSession()).setAttribute("rememberMe", request.getParameter("rememberMe"));
119
120 if (submitType == null || submitType.equalsIgnoreCase(previewButton) || context.hasErrors()) {
121 return new CommentFormView();
122 } else {
123 CommentConfirmationStrategy strategy = blog.getCommentConfirmationStrategy();
124
125 Comment clonedComment = (Comment)comment.clone();
126 ((ServletRequest) request.getSession()).setAttribute(Constants.COMMENT_KEY, comment);
127
128 if (strategy.confirmationRequired(clonedComment)) {
129 strategy.setupConfirmation(request);
130 return new ConfirmCommentView();
131 } else {
132 try {
133 saveComment(request, response, blogEntry, comment);
134 ((LogFactory) request.getSession()).removeAttribute(Constants.COMMENT_KEY);
135 return new CommentConfirmationView();
136 } catch (BlogServiceException be) {
137 log.error(be.getMessage(), be);
138 throw new ServletException(be);
139 }
140 }
141 }
142 }
143 }
SofCheck Inspector Build Version : 2.22510
| savecommentaction.java |
2010-Jul-19 17:34:36 |
| savecommentaction.class |
2010-Jul-19 20:23:38 |