KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > roller > ui > authoring > struts > actions > WebsiteFormAction


1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. The ASF licenses this file to You
4 * under the Apache License, Version 2.0 (the "License"); you may not
5 * use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License. For additional information regarding
15 * copyright in this work, please see the NOTICE file in the top level
16 * directory of this distribution.
17 */

18
19 package org.apache.roller.ui.authoring.struts.actions;
20
21 import java.io.IOException JavaDoc;
22 import java.util.ArrayList JavaDoc;
23 import java.util.Arrays JavaDoc;
24 import java.util.HashMap JavaDoc;
25 import java.util.Iterator JavaDoc;
26 import java.util.List JavaDoc;
27 import java.util.Map JavaDoc;
28
29 import javax.servlet.ServletContext JavaDoc;
30 import javax.servlet.ServletException JavaDoc;
31 import javax.servlet.http.HttpServletRequest JavaDoc;
32 import javax.servlet.http.HttpServletResponse JavaDoc;
33
34 import org.apache.commons.lang.StringUtils;
35 import org.apache.commons.logging.Log;
36 import org.apache.commons.logging.LogFactory;
37 import org.apache.struts.action.ActionError;
38 import org.apache.struts.action.ActionErrors;
39 import org.apache.struts.action.ActionForm;
40 import org.apache.struts.action.ActionForward;
41 import org.apache.struts.action.ActionMapping;
42 import org.apache.struts.action.ActionMessage;
43 import org.apache.struts.action.ActionMessages;
44 import org.apache.struts.actions.DispatchAction;
45 import org.apache.roller.RollerException;
46 import org.apache.roller.RollerPermissionsException;
47 import org.apache.roller.config.RollerConfig;
48 import org.apache.roller.config.RollerRuntimeConfig;
49 import org.apache.roller.model.PluginManager;
50 import org.apache.roller.model.Roller;
51 import org.apache.roller.model.RollerFactory;
52 import org.apache.roller.model.UserManager;
53 import org.apache.roller.model.WeblogManager;
54 import org.apache.roller.pojos.UserData;
55 import org.apache.roller.pojos.WebsiteData;
56 import org.apache.roller.ui.core.BasePageModel;
57 import org.apache.roller.ui.core.RollerRequest;
58 import org.apache.roller.ui.core.RollerSession;
59 import org.apache.roller.util.cache.CacheManager;
60 import org.apache.roller.ui.authoring.struts.formbeans.WebsiteFormEx;
61 import org.apache.roller.ui.core.RequestConstants;
62 import org.apache.roller.util.Blacklist;
63
64
65 /////////////////////////////////////////////////////////////////////////////
66
/**
67  * Website Settings action.
68  *
69  * @struts.action name="websiteFormEx" path="/roller-ui/authoring/website"
70  * scope="session" parameter="method"
71  *
72  * @struts.action-forward name="editWebsite.page" path=".edit-website"
73  * @struts.action-forward name="removeWebsite.page" path=".WebsiteRemove"
74  */

75 public final class WebsiteFormAction extends DispatchAction {
76     private static Log mLogger =
77             LogFactory.getFactory().getInstance(WebsiteFormAction.class);
78     
79     public ActionForward add(
80             ActionMapping mapping,
81             ActionForm actionForm,
82             HttpServletRequest JavaDoc request,
83             HttpServletResponse JavaDoc response)
84             throws Exception JavaDoc {
85         return update( mapping, actionForm, request, response );
86     }
87     
88     //-----------------------------------------------------------------------
89
public ActionForward edit(
90             ActionMapping mapping,
91             ActionForm actionForm,
92             HttpServletRequest JavaDoc request,
93             HttpServletResponse JavaDoc response)
94             throws IOException JavaDoc, ServletException JavaDoc {
95         ActionForward forward = mapping.findForward("editWebsite.page");
96         try {
97             RollerRequest rreq = RollerRequest.getRollerRequest(request);
98             WebsiteData website = rreq.getWebsite();
99             RollerSession rses = RollerSession.getRollerSession(request);
100             if (rses.isUserAuthorizedToAdmin(website)) {
101                 Roller roller = RollerFactory.getRoller();
102                 UserManager umgr = roller.getUserManager();
103                 WeblogManager wmgr = roller.getWeblogManager();
104                 UserData ud = rses.getAuthenticatedUser();
105                 request.setAttribute("user",ud);
106                 
107                 WebsiteFormEx wf = (WebsiteFormEx)actionForm;
108                 wf.copyFrom(website, request.getLocale());
109                 
110                 List JavaDoc cd = wmgr.getWeblogCategories(website, true);
111                 request.setAttribute("categories",cd);
112                 
113                 List JavaDoc bcd = wmgr.getWeblogCategories(website, false);
114                 request.setAttribute("bloggerCategories",bcd);
115                 
116                 List JavaDoc pages = umgr.getPages(website);
117                 request.setAttribute("pages",pages);
118                 
119                 ServletContext JavaDoc ctx = request.getSession().getServletContext();
120                 String JavaDoc editorPages =
121                         RollerRuntimeConfig.getProperty("users.editor.pages");
122                 
123                 List JavaDoc epages = Arrays.asList(StringUtils.split(
124                         StringUtils.deleteWhitespace(editorPages), ","));
125                 request.setAttribute("editorPagesList", epages);
126                 
127                 
128                 WebsitePageModel pageModel = new WebsitePageModel(
129                         "websiteSettings.title", request, response, mapping, website);
130                 request.setAttribute("model",pageModel);
131             } else {
132                 forward = mapping.findForward("access-denied");
133             }
134         } catch (Exception JavaDoc e) {
135             throw new ServletException JavaDoc(e);
136         }
137         return forward;
138     }
139     
140     
141     //-----------------------------------------------------------------------
142
public ActionForward update(
143             ActionMapping mapping,
144             ActionForm actionForm,
145             HttpServletRequest JavaDoc request,
146             HttpServletResponse JavaDoc response)
147             throws Exception JavaDoc {
148         ActionErrors errors = new ActionErrors();
149         ActionMessages messages = new ActionMessages();
150         ActionForward forward = mapping.findForward("editWebsite");
151         try {
152             WebsiteFormEx form = (WebsiteFormEx)actionForm;
153             WeblogManager wmgr = RollerFactory.getRoller().getWeblogManager();
154             UserManager umgr = RollerFactory.getRoller().getUserManager();
155             
156             WebsiteData wd = umgr.getWebsite(form.getId());
157             
158             // Set website in request, so subsequent action gets it
159
RollerRequest.getRollerRequest(request).setWebsite(wd);
160             
161             RollerSession rollerSession = RollerSession.getRollerSession(request);
162             if ( rollerSession.isUserAuthorizedToAdmin(wd)) {
163                 checkBlacklist(errors, messages, form.getBlacklist());
164                 if (errors.isEmpty()) {
165                     // ensure getEnabled can't be changed
166
form.setEnabled(wd.getEnabled());
167                     form.copyTo(wd, request.getLocale());
168                     
169                     // ROL-485: comments not be allowed on inactive weblogs
170
if (wd.getActive() != null && !wd.getActive().booleanValue()) {
171                         wd.setAllowComments(Boolean.FALSE);
172                         messages.add(null, new ActionMessage(
173                             "websiteSettings.commentsOffForInactiveWeblog"));
174                     }
175                                         
176                     umgr.saveWebsite(wd);
177                     
178                     // ROL-1050: apply comment defaults to existing entries
179
if (form.getApplyCommentDefaults() != null && form.getApplyCommentDefaults().booleanValue()) {
180                         wmgr.applyCommentDefaultsToEntries(wd);
181                     }
182
183                     RollerFactory.getRoller().getRefererManager().applyRefererFilters(wd);
184                     
185                     RollerFactory.getRoller().flush();
186                     
187                     messages.add(null,
188                         new ActionMessage("websiteSettings.savedChanges"));
189                     
190                     request.getSession().setAttribute(
191                         RequestConstants.WEBLOG_ID, form.getId());
192                     
193                     // Clear cache entries associated with website
194
CacheManager.invalidate(wd);
195             
196                     actionForm.reset(mapping,request);
197                 }
198                 
199                 // set the Editor Page list
200
ServletContext JavaDoc ctx = request.getSession().getServletContext();
201                 String JavaDoc editorPages =
202                         RollerRuntimeConfig.getProperty("users.editor.pages");
203                 
204                 List JavaDoc epages = Arrays.asList(StringUtils.split(
205                         org.apache.commons.lang.StringUtils.deleteWhitespace(editorPages), ","));
206                 request.setAttribute("editorPagesList", epages);
207                 
208                 WebsitePageModel pageModel =
209                         new WebsitePageModel("websiteSettings.title",
210                         request, response, mapping, wd);
211                 request.setAttribute("model",pageModel);
212                 
213             } else {
214                 forward = mapping.findForward("access-denied");
215             }
216             
217         } catch (RollerPermissionsException e) {
218             errors.add(null, new ActionError("error.permissions.deniedSave"));
219             forward = mapping.findForward("access-denied");
220         } catch (RollerException re) {
221             mLogger.error("Unexpected exception",re.getRootCause());
222             throw new ServletException JavaDoc(re);
223         } catch (Exception JavaDoc e) {
224             mLogger.error("Unexpected exception",e);
225             throw new ServletException JavaDoc(e);
226         }
227         if (errors.size() > 0) saveErrors(request, errors);
228         if (messages.size() > 0) saveMessages(request, messages);
229         return forward;
230     }
231     
232     /** Count string and regex ignore words, check regex for Syntax errors */
233     private void checkBlacklist(
234             ActionErrors errors, ActionMessages messages, String JavaDoc blacklist) {
235         List JavaDoc regexRules = new ArrayList JavaDoc();
236         List JavaDoc stringRules = new ArrayList JavaDoc();
237         try {
238             // just for testing/counting, this does not persist rules in any way
239
Blacklist.populateSpamRules(blacklist, stringRules, regexRules, null);
240             messages.add(null, new ActionMessage(
241                 "websiteSettings.acceptedBlacklist",
242                 new Integer JavaDoc(stringRules.size()), new Integer JavaDoc(regexRules.size())));
243         } catch (Throwable JavaDoc e) {
244             errors.add(null, new ActionMessage(
245                 "websiteSettings.error.processingBlacklist", e.getMessage()));
246         }
247     }
248     
249     //-----------------------------------------------------------------------
250
/** Send user to remove confirmation page */
251     public ActionForward removeOk(
252             ActionMapping mapping,
253             ActionForm actionForm,
254             HttpServletRequest JavaDoc request,
255             HttpServletResponse JavaDoc response)
256             throws Exception JavaDoc {
257         WebsiteFormEx form = (WebsiteFormEx)actionForm;
258         UserManager umgr = RollerFactory.getRoller().getUserManager();
259         WebsiteData website = umgr.getWebsite(form.getId());
260         ActionForward forward = mapping.findForward("removeWebsite.page");
261         request.setAttribute("model", new WebsitePageModel(
262                 "websiteRemove.title", request, response, mapping, website));
263         try {
264             RollerSession rses = RollerSession.getRollerSession(request);
265             if (rses.isUserAuthorizedToAdmin(website)) {
266                 form.copyFrom(website, request.getLocale());
267                 request.setAttribute("website", website);
268             } else {
269                 forward = mapping.findForward("access-denied");
270             }
271         } catch (Exception JavaDoc e) {
272             mLogger.error("ERROR in action",e);
273             throw new ServletException JavaDoc(e);
274         }
275         return forward;
276     }
277     
278     //-----------------------------------------------------------------------
279
public ActionForward remove(
280             ActionMapping mapping,
281             ActionForm actionForm,
282             HttpServletRequest JavaDoc request,
283             HttpServletResponse JavaDoc response)
284             throws Exception JavaDoc {
285         ActionForward forward = mapping.findForward("yourWebsites");
286         try {
287             UserManager umgr = RollerFactory.getRoller().getUserManager();
288             WebsiteFormEx form = (WebsiteFormEx)actionForm;
289             WebsiteData website = umgr.getWebsite(form.getId());
290             
291             RollerSession rses = RollerSession.getRollerSession(request);
292             if ( rses.isUserAuthorizedToAdmin(website) ) {
293                 
294                 // remove website
295
umgr.removeWebsite(website);
296                 RollerFactory.getRoller().flush();
297                 
298                 CacheManager.invalidate(website);
299                 
300                 actionForm.reset(mapping, request);
301             } else {
302                 forward = mapping.findForward("access-denied");
303             }
304         } catch (RollerException e) {
305             ActionErrors errors = new ActionErrors();
306             errors.add(null, new ActionError(
307                     "error.internationalized",e.getRootCauseMessage()));
308             saveErrors(request, errors);
309         } catch (Exception JavaDoc e) {
310             mLogger.error("ERROR in action",e);
311             throw new ServletException JavaDoc(e);
312         }
313         return forward;
314     }
315     
316     public class WebsitePageModel extends BasePageModel {
317         private List JavaDoc permissions = new ArrayList JavaDoc();
318         private boolean groupBloggingEnabled = false;
319         private boolean emailNotificationEnabled = false;
320         private boolean moderationRequired = false;
321         public WebsitePageModel(
322                 String JavaDoc titleKey,
323                 HttpServletRequest JavaDoc request,
324                 HttpServletResponse JavaDoc response,
325                 ActionMapping mapping,
326                 WebsiteData website) throws RollerException {
327             super(titleKey, request, response, mapping);
328             this.website = website;
329             Roller roller = RollerFactory.getRoller();
330             RollerSession rollerSession = RollerSession.getRollerSession(request);
331             UserData user = rollerSession.getAuthenticatedUser();
332             permissions = roller.getUserManager().getAllPermissions(website);
333             groupBloggingEnabled =
334                 RollerConfig.getBooleanProperty("groupblogging.enabled");
335             emailNotificationEnabled =
336                 RollerRuntimeConfig.getBooleanProperty("users.comments.emailnotify");
337             moderationRequired =
338                 RollerRuntimeConfig.getBooleanProperty("users.moderation.required");
339         }
340         public boolean isGroupBloggingEnabled() {
341             return groupBloggingEnabled;
342         }
343         public boolean isEmailNotificationEnabled() {
344             return emailNotificationEnabled;
345         }
346         public boolean isModerationRequired() {
347             return moderationRequired;
348         }
349         public boolean getHasPagePlugins() {
350             boolean ret = false;
351             try {
352                 Roller roller = RollerFactory.getRoller();
353                 PluginManager ppmgr = roller.getPagePluginManager();
354                 ret = ppmgr.hasPagePlugins();
355             } catch (RollerException e) {
356                 mLogger.error(e);
357             }
358             return ret;
359         }
360         
361         public List JavaDoc getPagePlugins() {
362             List JavaDoc list = new ArrayList JavaDoc();
363             try {
364                 if (getHasPagePlugins()) {
365                     Roller roller = RollerFactory.getRoller();
366                     PluginManager ppmgr = roller.getPagePluginManager();
367                     Map JavaDoc plugins = ppmgr.getWeblogEntryPlugins(
368                             getWebsite());
369                     Iterator JavaDoc it = plugins.values().iterator();
370                     while (it.hasNext()) list.add(it.next());
371                 }
372             } catch (Exception JavaDoc e) {
373                 mLogger.error(e);
374             }
375             return list;
376         }
377         
378         public boolean isGlobalAdminUser() throws RollerException {
379             return getRollerSession().isGlobalAdminUser();
380         }
381     }
382 }
383
384
Popular Tags