KickJava   Java API By Example, From Geeks To Geeks.

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


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.Date JavaDoc;
23 import javax.servlet.ServletException JavaDoc;
24 import javax.servlet.http.HttpServletRequest JavaDoc;
25 import javax.servlet.http.HttpServletResponse JavaDoc;
26 import org.apache.commons.logging.Log;
27 import org.apache.commons.logging.LogFactory;
28 import org.apache.struts.action.ActionForm;
29 import org.apache.struts.action.ActionForward;
30 import org.apache.struts.action.ActionMapping;
31 import org.apache.struts.action.ActionMessage;
32 import org.apache.struts.action.ActionMessages;
33 import org.apache.struts.actions.DispatchAction;
34 import org.apache.roller.RollerException;
35 import org.apache.roller.model.IndexManager;
36 import org.apache.roller.model.RollerFactory;
37 import org.apache.roller.model.UserManager;
38 import org.apache.roller.pojos.WebsiteData;
39 import org.apache.roller.ui.core.BasePageModel;
40 import org.apache.roller.ui.core.RollerRequest;
41 import org.apache.roller.ui.core.RollerSession;
42 import org.apache.roller.util.cache.CacheManager;
43
44
45 /**
46  * Allows user to perform Website maintenence operations such as flushing
47  * the website page cache or re-indexing the website search index.
48  *
49  * @struts.action path="/roller-ui/authoring/maintenance" name="maintenanceForm"
50  * scope="request" parameter="method"
51  *
52  * @struts.action-forward name="maintenance.page" path=".Maintenance"
53  */

54 public class MaintenanceAction extends DispatchAction {
55     
56     private static Log mLogger = LogFactory.getLog(MaintenanceAction.class);
57     
58     
59     /* (non-Javadoc)
60      * @see org.apache.struts.actions.DispatchAction#unspecified(
61      * org.apache.struts.action.ActionMapping,
62      * org.apache.struts.action.ActionForm,
63      * javax.servlet.http.HttpServletRequest,
64      * javax.servlet.http.HttpServletResponse)
65      */

66     protected ActionForward unspecified(
67             ActionMapping mapping,
68             ActionForm actionForm,
69             HttpServletRequest JavaDoc request,
70             HttpServletResponse JavaDoc response)
71             throws ServletException JavaDoc {
72         
73         request.setAttribute("model", new BasePageModel(
74                 "maintenance.title", request, response, mapping));
75         return mapping.findForward("maintenance.page");
76     }
77     
78     
79     /**
80      * Respond to user's request to rebuild search index.
81      */

82     public ActionForward index(
83             ActionMapping mapping,
84             ActionForm actionForm,
85             HttpServletRequest JavaDoc request,
86             HttpServletResponse JavaDoc response)
87             throws IOException JavaDoc, ServletException JavaDoc {
88         
89         try {
90             RollerRequest rreq = RollerRequest.getRollerRequest(request);
91             WebsiteData website = rreq.getWebsite();
92             RollerSession rses = RollerSession.getRollerSession(request);
93             
94             if (rses.isUserAuthorizedToAdmin(website) ) {
95                 IndexManager manager =
96                         RollerFactory.getRoller().getIndexManager();
97                 manager.rebuildWebsiteIndex(website);
98                 
99                 ActionMessages messages = new ActionMessages();
100                 messages.add(null, new ActionMessage("maintenance.message.indexed"));
101                 saveMessages(request, messages);
102             }
103             
104             request.setAttribute("model", new BasePageModel(
105                     "maintenance.title", request, response, mapping));
106             
107         } catch (RollerException re) {
108             mLogger.error("Unexpected exception",re.getRootCause());
109             throw new ServletException JavaDoc(re);
110         } catch (Exception JavaDoc e) {
111             mLogger.error("Unexpected exception",e);
112             throw new ServletException JavaDoc(e);
113         }
114         
115         return mapping.findForward("maintenance.page");
116     }
117     
118     
119     /**
120      * Respond to request to flush a user's page cache.
121      */

122     public ActionForward flushCache(
123             ActionMapping mapping,
124             ActionForm actionForm,
125             HttpServletRequest JavaDoc request,
126             HttpServletResponse JavaDoc response)
127             throws IOException JavaDoc, ServletException JavaDoc {
128         
129         try {
130             RollerRequest rreq = RollerRequest.getRollerRequest(request);
131             WebsiteData website = rreq.getWebsite();
132             RollerSession rses = RollerSession.getRollerSession(request);
133             
134             if ( rses.isUserAuthorizedToAdmin(website) ) {
135                 
136                 // some caches are based on weblog last-modified, so update it
137
website.setLastModified(new Date JavaDoc());
138                 
139                 try {
140                     UserManager umgr = RollerFactory.getRoller().getUserManager();
141                     umgr.saveWebsite(website);
142                     RollerFactory.getRoller().flush();
143                 } catch (RollerException ex) {
144                     mLogger.error("Error saving website", ex);
145                 }
146                 
147                 // also notify cache manager
148
CacheManager.invalidate(website);
149                 
150                 ActionMessages messages = new ActionMessages();
151                 messages.add(null, new ActionMessage("maintenance.message.flushed"));
152                 saveMessages(request, messages);
153                 
154             }
155             
156             request.setAttribute("model", new BasePageModel(
157                     "maintenance.title", request, response, mapping));
158             
159         } catch (Exception JavaDoc e) {
160             throw new ServletException JavaDoc(e);
161         }
162         
163         return mapping.findForward("maintenance.page");
164     }
165     
166 }
167
Popular Tags