File Source: manageresponsesaction.java
/*
P/P * Method: net.sourceforge.pebble.web.action.ManageResponsesAction__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
34 import net.sourceforge.pebble.Constants;
35 import net.sourceforge.pebble.domain.*;
36 import net.sourceforge.pebble.web.security.RequireSecurityToken;
37 import net.sourceforge.pebble.web.view.ForwardView;
38 import net.sourceforge.pebble.web.view.RedirectView;
39 import net.sourceforge.pebble.web.view.View;
40 import org.apache.commons.logging.Log;
41 import org.apache.commons.logging.LogFactory;
42
/*
P/P * Method: void net.sourceforge.pebble.web.action.ManageResponsesAction()
*/
43 import javax.servlet.ServletException;
44 import javax.servlet.http.HttpServletRequest;
45 import javax.servlet.http.HttpServletResponse;
46
47 /**
48 * Allows the user to manage recently added responses.
49 *
50 * @author Simon Brown
51 */
52 @RequireSecurityToken
53 public class ManageResponsesAction extends SecureAction {
54
55 /** the log used by this class */
56 private static final Log log = LogFactory.getLog(ManageResponsesAction.class);
57
58 /** constant used to represent a comment */
59 private static final String COMMENT = "c";
60
61 /** constant used to represent a TrackBack */
62 private static final String TRACKBACK = "t";
63
64 /**
65 * Peforms the processing associated with this action.
66 *
67 * @param request the HttpServletRequest instance
68 * @param response the HttpServletResponse instance
69 * @return the name of the next view
70 */
71 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
*
* Presumptions:
* Local_10[Local_8]@73 != null
* ids.length@73 <= 232-1
* java.util.HashMap:get(...)@63 != null
* net.sourceforge.pebble.domain.Response:getBlogEntry(...)@103 != null
* org.apache.commons.logging.LogFactory:getLog(...)@56 != null
*
* Postconditions:
* return_value in Addr_Set{&new RedirectView(process#5),&new ForwardView(process#6)}
* new ForwardView(process#6) num objects <= 1
* new ForwardView(process#6).uri == &".viewResponses.secureaction"
* new RedirectView(process#5) num objects <= 1
*
* Test Vectors:
* java.lang.String:equalsIgnoreCase(...)@101: {0}, {1}
* java.lang.String:equalsIgnoreCase(...)@85: {0}, {1}
* java.lang.String:equalsIgnoreCase(...)@93: {0}, {1}
* java.lang.String:length(...)@115: {0}, {1..232-1}
* javax.servlet.http.HttpServletRequest:getParameter(...)@114: Addr_Set{null}, Inverse{null}
* javax.servlet.http.HttpServletRequest:getParameter(...)@74: Addr_Set{null}, Inverse{null}
* javax.servlet.http.HttpServletRequest:getParameterValues(...)@73: Addr_Set{null}, Inverse{null}
*/
72 Blog blog = (Blog)getModel().get(Constants.BLOG_KEY);
73 String ids[] = request.getParameterValues("response");
74 String submit = request.getParameter("submit");
75 BlogService service = new BlogService();
76
77 if (ids != null && submit != null) {
78 for (String id : ids) {
79 Response ber = getBlogEntryResponse(blog, id);
80
81 if (ber == null) {
82 continue;
83 }
84
85 if (submit.equalsIgnoreCase("Approve")) {
86 try {
87 ber.setApproved();
88 service.putBlogEntry(ber.getBlogEntry());
89 blog.info("Response <a href=\"" + ber.getPermalink() + "\">" + ber.getTitle() + " (" + ber.getSourceName() + ")</a> approved.");
90 } catch (BlogServiceException be) {
91 log.error("Error updating state for response", be);
92 }
93 } else if (submit.equalsIgnoreCase("Reject")) {
94 try {
95 ber.setRejected();
96 service.putBlogEntry(ber.getBlogEntry());
97 blog.info("Response \"" + ber.getTitle() + "\" (" + ber.getSourceName() + ") rejected.");
98 } catch (BlogServiceException be) {
99 log.error("Error updating state for response", be);
100 }
101 } else if (submit.equalsIgnoreCase("Remove")) {
102 try {
103 ber.getBlogEntry().removeResponse(ber);
104 service.putBlogEntry(ber.getBlogEntry());
105 blog.info("Response \"" + ber.getTitle() + "\" (" + ber.getSourceName() + ") removed.");
106 } catch (BlogServiceException be) {
107 log.error("Error updating state for response", be);
108 }
109 }
110
111 }
112 }
113
114 String redirectUrl = request.getParameter("redirectUrl");
115 if (redirectUrl != null && redirectUrl.trim().length() > 0) {
116 return new RedirectView(redirectUrl);
117 } else {
118 return new ForwardView("/viewResponses.secureaction");
119 }
120 }
121
122 /**
123 * Gets a list of all roles that are allowed to access this action.
124 *
125 * @return an array of Strings representing role names
126 * @param request
127 */
128 public String[] getRoles(HttpServletRequest request) {
/*
P/P * Method: String[] getRoles(HttpServletRequest)
*
* Presumptions:
* init'ed(net.sourceforge.pebble.Constants.BLOG_CONTRIBUTOR_ROLE)
*
* Postconditions:
* return_value == &new String[](getRoles#1)
* new String[](getRoles#1) num objects == 1
* return_value.length == 1
* return_value[0] == net.sourceforge.pebble.Constants.BLOG_CONTRIBUTOR_ROLE
* (soft) init'ed(return_value[0])
*/
129 return new String[]{Constants.BLOG_CONTRIBUTOR_ROLE};
130 }
131
/*
P/P * Method: Response getBlogEntryResponse(Blog, String)
*
* Preconditions:
* guid != null
*
* Presumptions:
* java.lang.String:lastIndexOf(...)@136 <= 232-2
* org.apache.commons.logging.LogFactory:getLog(...)@56 != null
*
* Postconditions:
* init'ed(return_value)
*
* Test Vectors:
* java.lang.String:equalsIgnoreCase(...)@150: {0}, {1}
* java.lang.String:equalsIgnoreCase(...)@152: {0}, {1}
* net.sourceforge.pebble.domain.BlogService:getBlogEntry(...)@141: Inverse{null}, Addr_Set{null}
*/
132 private Response getBlogEntryResponse(Blog blog, String guid) throws ServletException {
133 // response key is of the form type/blogEntryId/responseId
134 String type = guid.substring(0, 1);
135 String blogEntryId = guid.substring(2, guid.indexOf("/", 2));
136 String responseId = guid.substring(guid.lastIndexOf("/")+1);
137
138 BlogService service = new BlogService();
139 BlogEntry blogEntry = null;
140 try {
141 blogEntry = service.getBlogEntry(blog, blogEntryId);
142 } catch (BlogServiceException e) {
143 throw new ServletException(e);
144 }
145 if (blogEntry == null) {
146 return null;
147 }
148
149 try {
+ 150 if (type != null && type.equalsIgnoreCase(COMMENT)) {
151 return blogEntry.getComment(Long.parseLong(responseId));
+ 152 } else if (type != null && type.equalsIgnoreCase(TRACKBACK)) {
153 return blogEntry.getTrackBack(Long.parseLong(responseId));
154 }
155 } catch (NumberFormatException e) {
156 log.warn(e);
157 }
158
159 return null;
160 }
161
162 }
SofCheck Inspector Build Version : 2.22510
| manageresponsesaction.java |
2010-Jun-25 19:40:34 |
| manageresponsesaction.class |
2010-Jul-19 20:23:38 |