KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > blojsom > plugin > admin > BulkResponseManagement


1 /**
2  * Copyright (c) 2003-2006, David A. Czarnecki
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 notice, this list of conditions and the
9  * following disclaimer.
10  * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the
11  * following disclaimer in the documentation and/or other materials provided with the distribution.
12  * Neither the name of "David A. Czarnecki" and "blojsom" nor the names of its contributors may be used to
13  * endorse or promote products derived from this software without specific prior written permission.
14  * Products derived from this software may not be called "blojsom", nor may "blojsom" appear in their name,
15  * without prior written permission of David A. Czarnecki.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
18  * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
19  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
20  * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
21  * EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
22  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
26  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
27  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
29  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30  */

31 package org.blojsom.plugin.admin;
32
33 import org.apache.commons.logging.Log;
34 import org.apache.commons.logging.LogFactory;
35 import org.blojsom.blog.*;
36 import org.blojsom.event.EventBroadcaster;
37 import org.blojsom.fetcher.Fetcher;
38 import org.blojsom.fetcher.FetcherException;
39 import org.blojsom.plugin.PluginException;
40 import org.blojsom.plugin.comment.event.CommentApprovedEvent;
41 import org.blojsom.plugin.comment.event.CommentDeletedEvent;
42 import org.blojsom.plugin.comment.event.CommentMarkedSpamEvent;
43 import org.blojsom.plugin.common.ResponseConstants;
44 import org.blojsom.plugin.pingback.event.PingbackApprovedEvent;
45 import org.blojsom.plugin.pingback.event.PingbackDeletedEvent;
46 import org.blojsom.plugin.pingback.event.PingbackMarkedSpamEvent;
47 import org.blojsom.plugin.trackback.event.TrackbackApprovedEvent;
48 import org.blojsom.plugin.trackback.event.TrackbackDeletedEvent;
49 import org.blojsom.plugin.trackback.event.TrackbackMarkedSpamEvent;
50 import org.blojsom.util.BlojsomConstants;
51 import org.blojsom.util.BlojsomUtils;
52
53 import javax.servlet.http.HttpServletRequest JavaDoc;
54 import javax.servlet.http.HttpServletResponse JavaDoc;
55 import java.util.Date JavaDoc;
56 import java.util.Map JavaDoc;
57
58 /**
59  * Bulk Response Management plugin
60  *
61  * @author David Czarnecki
62  * @since blojsom 3.0
63  * @version $Id: BulkResponseManagement.java,v 1.5 2006/09/26 02:55:20 czarneckid Exp $
64  */

65 public class BulkResponseManagement extends BaseAdminPlugin {
66
67     private Log _logger = LogFactory.getLog(BulkResponseManagement.class);
68
69     private static final String JavaDoc BULK_RESPONSE_MANAGEMENT_PERMISSION = "bulk_response_management_permission";
70     private static final String JavaDoc BLOJSOM_USER_OBJECT = "BLOJSOM_USER_OBJECT";
71
72     private String JavaDoc [] DEFAULT_RESPONSE_STATUS_LIST = {ResponseConstants.NEW_STATUS, ResponseConstants.SPAM_STATUS};
73
74     // Localization constants
75
private static final String JavaDoc FAILED_BULK_PERMISSION_KEY = "failed.bulk.permission.text";
76     private static final String JavaDoc SUCCESFUL_BULK_PROCESSING_KEY = "successful.bulk.processing.text";
77
78     // Pages
79
private static final String JavaDoc BULK_RESPONSE_MANAGEMENT_PAGE = "/org/blojsom/plugin/admin/templates/bulk-response-management";
80
81     // Actions
82
private static final String JavaDoc BULK_RESPONSE_MANAGEMENT_ACTION = "bulk-response-management";
83
84     // Context attributes
85
private static final String JavaDoc BULK_RESPONSES = "BULK_RESPONSES";
86
87     // Form items
88
private static final String JavaDoc DELETE_COMMENTS = "delete_comments";
89     private static final String JavaDoc APPROVE_COMMENTS = "approve_comments";
90     private static final String JavaDoc DELETE_TRACKBACKS = "delete_trackbacks";
91     private static final String JavaDoc APPROVE_TRACKBACKS = "approve_trackbacks";
92     private static final String JavaDoc DELETE_PINGBACKS = "delete_pingbacks";
93     private static final String JavaDoc APPROVE_PINGBACKS = "approve_pingbacks";
94     private static final String JavaDoc MARK_SPAM_COMMENTS = "mark_spam_comments";
95     private static final String JavaDoc MARK_SPAM_TRACKBACKS = "mark_spam_trackbacks";
96     private static final String JavaDoc MARK_SPAM_PINGBACKS = "mark_spam_pingbacks";
97     private static final String JavaDoc QUERY = "query";
98
99     private Fetcher _fetcher;
100     private EventBroadcaster _eventBroadcaster;
101     private String JavaDoc[] _responseStatusList = DEFAULT_RESPONSE_STATUS_LIST;
102
103     /**
104      * Create a new instance of the bulk response management plugin.
105      */

106     public BulkResponseManagement() {
107     }
108
109     /**
110      * Set the {@link Fetcher}
111      *
112      * @param fetcher {@link Fetcher}
113      */

114     public void setFetcher(Fetcher fetcher) {
115         _fetcher = fetcher;
116     }
117
118     /**
119      * Set the {@link EventBroadcaster}
120      *
121      * @param eventBroadcaster {@link EventBroadcaster}
122      */

123     public void setEventBroadcaster(EventBroadcaster eventBroadcaster) {
124         _eventBroadcaster = eventBroadcaster;
125     }
126
127     /**
128      * Set the response status codes to search for in bulk management
129      *
130      * @param statusList Status list
131      */

132     public void setResponseStatusList(String JavaDoc[] statusList) {
133         _responseStatusList = statusList;
134     }
135
136     /**
137      * Process the blog entries
138      *
139      * @param httpServletRequest Request
140      * @param httpServletResponse Response
141      * @param blog {@link Blog} instance
142      * @param context Context
143      * @param entries Blog entries retrieved for the particular request
144      * @return Modified set of blog entries
145      * @throws PluginException If there is an error processing the blog entries
146      */

147     public Entry[] process(HttpServletRequest JavaDoc httpServletRequest, HttpServletResponse JavaDoc httpServletResponse, Blog blog, Map JavaDoc context, Entry[] entries) throws PluginException {
148         if (!authenticateUser(httpServletRequest, httpServletResponse, context, blog)) {
149             httpServletRequest.setAttribute(BlojsomConstants.PAGE_PARAM, ADMIN_LOGIN_PAGE);
150
151             return entries;
152         }
153
154         String JavaDoc username = getUsernameFromSession(httpServletRequest, blog);
155         if (!checkPermission(blog, null, username, BULK_RESPONSE_MANAGEMENT_PERMISSION)) {
156             httpServletRequest.setAttribute(BlojsomConstants.PAGE_PARAM, ADMIN_ADMINISTRATION_PAGE);
157             addOperationResultMessage(context, getAdminResource(FAILED_BULK_PERMISSION_KEY, FAILED_BULK_PERMISSION_KEY, blog.getBlogAdministrationLocale()));
158
159             return entries;
160         }
161
162         try {
163             context.put(BLOJSOM_USER_OBJECT, _fetcher.loadUser(blog, username));
164         } catch (FetcherException e) {
165             if (_logger.isErrorEnabled()) {
166                 _logger.error(e);
167             }
168         }
169
170         String JavaDoc action = BlojsomUtils.getRequestValue(ACTION_PARAM, httpServletRequest);
171         if (BlojsomUtils.checkNullOrBlank(action)) {
172             if (_logger.isDebugEnabled()) {
173                 _logger.debug("User did not request edit action");
174             }
175             httpServletRequest.setAttribute(BlojsomConstants.PAGE_PARAM, ADMIN_ADMINISTRATION_PAGE);
176         } else if (PAGE_ACTION.equals(action)) {
177             if (_logger.isDebugEnabled()) {
178                 _logger.debug("User requested bulk response edit page");
179             }
180         } else if (BULK_RESPONSE_MANAGEMENT_ACTION.equals(action)) {
181             if (_logger.isDebugEnabled()) {
182                 _logger.debug("User requested bulk response management action");
183             }
184
185             int commentsApproved = 0;
186             int commentsDeleted = 0;
187             int trackbacksApproved = 0;
188             int trackbacksDeleted = 0;
189             int pingbacksApproved = 0;
190             int pingbacksDeleted = 0;
191
192             Integer JavaDoc entityID;
193
194             String JavaDoc[] markspamComments = BlojsomUtils.getRequestValues(MARK_SPAM_COMMENTS, httpServletRequest);
195             for (int i = 0; i < markspamComments.length; i++) {
196                 try {
197                     String JavaDoc item = markspamComments[i];
198                     entityID = Integer.valueOf(item);
199                     Comment comment = _fetcher.newComment();
200                     comment.setBlogId(blog.getId());
201                     comment.setId(entityID);
202
203                     _fetcher.loadComment(blog, comment);
204
205                     CommentMarkedSpamEvent commentMarkedSpamEvent = new CommentMarkedSpamEvent(this, new Date JavaDoc(), comment, blog);
206                     _eventBroadcaster.broadcastEvent(commentMarkedSpamEvent);
207
208                     if (_logger.isDebugEnabled()) {
209                         _logger.debug("Marked comment as spam for comment ID: " + entityID);
210                     }
211                 } catch (NumberFormatException JavaDoc e) {
212                 } catch (FetcherException e) {
213                     if (_logger.isErrorEnabled()) {
214                         _logger.error(e);
215                     }
216                 }
217             }
218
219             String JavaDoc[] markspamTrackbacks = BlojsomUtils.getRequestValues(MARK_SPAM_TRACKBACKS, httpServletRequest);
220             for (int i = 0; i < markspamTrackbacks.length; i++) {
221                 try {
222                     String JavaDoc item = markspamTrackbacks[i];
223                     entityID = Integer.valueOf(item);
224                     Trackback trackback = _fetcher.newTrackback();
225                     trackback.setBlogId(blog.getId());
226                     trackback.setId(entityID);
227
228                     _fetcher.loadTrackback(blog, trackback);
229
230                     TrackbackMarkedSpamEvent trackbackMarkedSpamEvent = new TrackbackMarkedSpamEvent(this, new Date JavaDoc(), trackback, blog);
231                     _eventBroadcaster.broadcastEvent(trackbackMarkedSpamEvent);
232
233                     if (_logger.isDebugEnabled()) {
234                         _logger.debug("Marked trackback as spam for trackback ID: " + entityID);
235                     }
236                 } catch (NumberFormatException JavaDoc e) {
237                 } catch (FetcherException e) {
238                     if (_logger.isErrorEnabled()) {
239                         _logger.error(e);
240                     }
241                 }
242             }
243
244             String JavaDoc[] markspamPingbacks = BlojsomUtils.getRequestValues(MARK_SPAM_PINGBACKS, httpServletRequest);
245             for (int i = 0; i < markspamPingbacks.length; i++) {
246                 try {
247                     String JavaDoc item = markspamPingbacks[i];
248                     entityID = Integer.valueOf(item);
249                     Pingback pingback = _fetcher.newPingback();
250                     pingback.setBlogId(blog.getId());
251                     pingback.setId(entityID);
252
253                     _fetcher.loadPingback(blog, pingback);
254
255                     PingbackMarkedSpamEvent pingbackMarkedSpamEvent = new PingbackMarkedSpamEvent(this, new Date JavaDoc(), pingback, blog);
256                     _eventBroadcaster.broadcastEvent(pingbackMarkedSpamEvent);
257
258                     if (_logger.isDebugEnabled()) {
259                         _logger.debug("Marked pingback as spam for pingback ID: " + entityID);
260                     }
261                 } catch (NumberFormatException JavaDoc e) {
262                 } catch (FetcherException e) {
263                     if (_logger.isErrorEnabled()) {
264                         _logger.error(e);
265                     }
266                 }
267             }
268
269             String JavaDoc[] delete = BlojsomUtils.getRequestValues(DELETE_COMMENTS, httpServletRequest);
270             for (int i = 0; i < delete.length; i++) {
271                 String JavaDoc item = delete[i];
272                 try {
273                     entityID = Integer.valueOf(item);
274                     Comment comment = _fetcher.newComment();
275                     comment.setBlogId(blog.getId());
276                     comment.setId(entityID);
277
278                     _fetcher.loadComment(blog, comment);
279                     _fetcher.deleteComment(blog, comment);
280                     commentsDeleted++;
281
282                     _eventBroadcaster.broadcastEvent(new CommentDeletedEvent(this, new Date JavaDoc(), comment, blog));
283                     if (_logger.isDebugEnabled()) {
284                         _logger.debug("Bulk delete comment ID: " + entityID);
285                     }
286                 } catch (NumberFormatException JavaDoc e) {
287                 } catch (FetcherException e) {
288                     if (_logger.isErrorEnabled()) {
289                         _logger.error(e);
290                     }
291                 }
292             }
293
294             String JavaDoc[] approve = BlojsomUtils.getRequestValues(APPROVE_COMMENTS, httpServletRequest);
295             for (int i = 0; i < approve.length; i++) {
296                 String JavaDoc item = approve[i];
297                 try {
298                     entityID = Integer.valueOf(item);
299                     Comment comment = _fetcher.newComment();
300                     comment.setBlogId(blog.getId());
301                     comment.setId(entityID);
302
303                     _fetcher.loadComment(blog, comment);
304                     comment.setStatus(ResponseConstants.APPROVED_STATUS);
305                     _fetcher.saveComment(blog, comment);
306                     commentsApproved += 1;
307
308                     _eventBroadcaster.broadcastEvent(new CommentApprovedEvent(this, new Date JavaDoc(), comment, blog));
309                     if (_logger.isDebugEnabled()) {
310                         _logger.debug("Bulk approve comment ID: " + entityID);
311                     }
312                 } catch (NumberFormatException JavaDoc e) {
313                 } catch (FetcherException e) {
314                     if (_logger.isErrorEnabled()) {
315                         _logger.error(e);
316                     }
317                 }
318             }
319
320             delete = BlojsomUtils.getRequestValues(DELETE_TRACKBACKS, httpServletRequest);
321             for (int i = 0; i < delete.length; i++) {
322                 String JavaDoc item = delete[i];
323                 try {
324                     entityID = Integer.valueOf(item);
325                     Trackback trackback = _fetcher.newTrackback();
326                     trackback.setBlogId(blog.getId());
327                     trackback.setId(entityID);
328
329                     _fetcher.loadTrackback(blog, trackback);
330                     _fetcher.deleteTrackback(blog, trackback);
331                     trackbacksDeleted += 1;
332
333                     _eventBroadcaster.broadcastEvent(new TrackbackDeletedEvent(this, new Date JavaDoc(), trackback, blog));
334                     if (_logger.isDebugEnabled()) {
335                         _logger.debug("Bulk delete trackback ID: " + entityID);
336                     }
337                 } catch (NumberFormatException JavaDoc e) {
338                 } catch (FetcherException e) {
339                     if (_logger.isErrorEnabled()) {
340                         _logger.error(e);
341                     }
342                 }
343             }
344
345             approve = BlojsomUtils.getRequestValues(APPROVE_TRACKBACKS, httpServletRequest);
346             for (int i = 0; i < approve.length; i++) {
347                 String JavaDoc item = approve[i];
348                 try {
349                     entityID = Integer.valueOf(item);
350                     Trackback trackback = _fetcher.newTrackback();
351                     trackback.setBlogId(blog.getId());
352                     trackback.setId(entityID);
353
354                     _fetcher.loadTrackback(blog, trackback);
355                     trackback.setStatus(ResponseConstants.APPROVED_STATUS);
356                     _fetcher.saveTrackback(blog, trackback);
357                     trackbacksApproved += 1;
358
359                     _eventBroadcaster.broadcastEvent(new TrackbackApprovedEvent(this, new Date JavaDoc(), trackback, blog));
360                     if (_logger.isDebugEnabled()) {
361                         _logger.debug("Bulk approve trackback ID: " + entityID);
362                     }
363                 } catch (NumberFormatException JavaDoc e) {
364                 } catch (FetcherException e) {
365                     if (_logger.isErrorEnabled()) {
366                         _logger.error(e);
367                     }
368                 }
369             }
370
371             delete = BlojsomUtils.getRequestValues(DELETE_PINGBACKS, httpServletRequest);
372             for (int i = 0; i < delete.length; i++) {
373                 String JavaDoc item = delete[i];
374                 try {
375                     entityID = Integer.valueOf(item);
376                     Pingback pingback = _fetcher.newPingback();
377                     pingback.setBlogId(blog.getId());
378                     pingback.setId(entityID);
379
380                     _fetcher.loadPingback(blog, pingback);
381                     _fetcher.deletePingback(blog, pingback);
382                     pingbacksDeleted += 1;
383
384                     _eventBroadcaster.broadcastEvent(new PingbackDeletedEvent(this, new Date JavaDoc(), pingback, blog));
385                     if (_logger.isDebugEnabled()) {
386                         _logger.debug("Bulk delete pingback ID: " + entityID);
387                     }
388                 } catch (NumberFormatException JavaDoc e) {
389                 } catch (FetcherException e) {
390                     if (_logger.isErrorEnabled()) {
391                         _logger.error(e);
392                     }
393                 }
394             }
395
396             approve = BlojsomUtils.getRequestValues(APPROVE_PINGBACKS, httpServletRequest);
397             for (int i = 0; i < approve.length; i++) {
398                 String JavaDoc item = approve[i];
399                 try {
400                     entityID = Integer.valueOf(item);
401                     Pingback pingback = _fetcher.newPingback();
402                     pingback.setBlogId(blog.getId());
403                     pingback.setId(entityID);
404
405                     _fetcher.loadPingback(blog, pingback);
406                     pingback.setStatus(ResponseConstants.APPROVED_STATUS);
407                     _fetcher.savePingback(blog, pingback);
408                     pingbacksApproved += 1;
409
410                     _eventBroadcaster.broadcastEvent(new PingbackApprovedEvent(this, new Date JavaDoc(), pingback, blog));
411                     if (_logger.isDebugEnabled()) {
412                         _logger.debug("Bulk approve pingback ID: " + entityID);
413                     }
414                 } catch (NumberFormatException JavaDoc e) {
415                 } catch (FetcherException e) {
416                     if (_logger.isErrorEnabled()) {
417                         _logger.error(e);
418                     }
419                 }
420             }
421
422             if (commentsApproved > 0 || commentsDeleted > 0 || trackbacksApproved > 0 || trackbacksDeleted > 0
423                     || pingbacksApproved > 0 || pingbacksDeleted > 0) {
424                 addOperationResultMessage(context, formatAdminResource(SUCCESFUL_BULK_PROCESSING_KEY, SUCCESFUL_BULK_PROCESSING_KEY,
425                     blog.getBlogAdministrationLocale(),
426                     new Object JavaDoc[] {new Integer JavaDoc(commentsApproved), new Integer JavaDoc(commentsDeleted),
427                             new Integer JavaDoc(trackbacksApproved), new Integer JavaDoc(trackbacksDeleted),
428                             new Integer JavaDoc(pingbacksApproved), new Integer JavaDoc(pingbacksDeleted)}));
429             }
430         }
431
432         String JavaDoc query = BlojsomUtils.getRequestValue(QUERY, httpServletRequest);
433
434         // Put the responses on the request
435
try {
436             if (BlojsomUtils.checkNullOrBlank(query)) {
437                 context.put(BULK_RESPONSES, _fetcher.findResponsesByStatus(blog, _responseStatusList));
438             } else {
439                 context.put(BULK_RESPONSES, _fetcher.findResponsesByQuery(blog, query));
440                 context.put(QUERY, BlojsomUtils.escapeString(query));
441             }
442         } catch (FetcherException e) {
443             if (_logger.isErrorEnabled()) {
444                 _logger.error(e);
445             }
446         }
447
448         httpServletRequest.setAttribute(BlojsomConstants.PAGE_PARAM, BULK_RESPONSE_MANAGEMENT_PAGE);
449
450         return entries;
451     }
452 }
453
Popular Tags