KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > roller > ui > core > struts > actions > CreateWebsiteAction


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.core.struts.actions;
20
21 import java.util.List JavaDoc;
22 import javax.servlet.http.HttpServletRequest JavaDoc;
23 import javax.servlet.http.HttpServletResponse JavaDoc;
24 import org.apache.commons.lang.CharSetUtils;
25 import org.apache.commons.logging.Log;
26 import org.apache.commons.logging.LogFactory;
27 import org.apache.struts.action.ActionError;
28 import org.apache.struts.action.ActionErrors;
29 import org.apache.struts.action.ActionForm;
30 import org.apache.struts.action.ActionForward;
31 import org.apache.struts.action.ActionMapping;
32 import org.apache.struts.action.ActionMessage;
33 import org.apache.struts.action.ActionMessages;
34 import org.apache.struts.actions.DispatchAction;
35 import org.apache.roller.RollerException;
36 import org.apache.roller.config.RollerConfig;
37 import org.apache.roller.config.RollerRuntimeConfig;
38 import org.apache.roller.model.Roller;
39 import org.apache.roller.model.RollerFactory;
40 import org.apache.roller.model.ThemeManager;
41 import org.apache.roller.model.UserManager;
42 import org.apache.roller.pojos.UserData;
43 import org.apache.roller.pojos.WebsiteData;
44 import org.apache.roller.ui.core.BasePageModel;
45 import org.apache.roller.ui.core.RollerContext;
46 import org.apache.roller.ui.core.RollerSession;
47 import org.apache.roller.ui.authoring.struts.formbeans.CreateWebsiteForm;
48 import org.apache.roller.util.Utilities;
49
50
51 /**
52  * Allows user to create a new website.
53  *
54  * @struts.action path="/roller-ui/createWebsite" parameter="method" name="createWebsiteForm"
55  * @struts.action-forward name="createWebsite.page" path=".CreateWebsite"
56  * @struts.action-forward name="createWebsiteDone.page" path=".CreateWebsiteDone"
57  */

58 public class CreateWebsiteAction extends DispatchAction {
59     
60     protected static String JavaDoc DEFAULT_ALLOWED_CHARS = "A-Za-z0-9";
61     
62     private static Log mLogger = LogFactory.getLog(CreateWebsiteAction.class);
63     
64     
65     /** If method param is not specified, use HTTP verb to pick method to call */
66     public ActionForward unspecified(
67             ActionMapping mapping,
68             ActionForm actionForm,
69             HttpServletRequest JavaDoc request,
70             HttpServletResponse JavaDoc response)
71             throws Exception JavaDoc {
72         
73         if (request.getMethod().equals("GET")) {
74             return create(mapping, actionForm, request, response);
75         }
76         return save(mapping, actionForm, request, response);
77     }
78     
79     
80     public ActionForward cancel(
81             ActionMapping mapping,
82             ActionForm actionForm,
83             HttpServletRequest JavaDoc request,
84             HttpServletResponse JavaDoc response)
85             throws Exception JavaDoc {
86         
87         return mapping.findForward("yourWebsites");
88     }
89     
90     
91     /** Present new website form to user */
92     public ActionForward create(
93             ActionMapping mapping,
94             ActionForm actionForm,
95             HttpServletRequest JavaDoc request,
96             HttpServletResponse JavaDoc response)
97             throws Exception JavaDoc {
98         
99         ActionForward forward = mapping.findForward("createWebsite.page");
100         CreateWebsiteForm form = (CreateWebsiteForm)actionForm;
101         
102         RollerSession rses = RollerSession.getRollerSession(request);
103         UserData user = rses.getAuthenticatedUser();
104         form.setLocale(user.getLocale());
105         form.setTimeZone(user.getTimeZone());
106         form.setEmailAddress(user.getEmailAddress());
107         
108         if (!RollerConfig.getBooleanProperty("groupblogging.enabled")) {
109             Roller roller = RollerFactory.getRoller();
110             List JavaDoc permissions = roller.getUserManager().getAllPermissions(user);
111             if (permissions.size() > 0) {
112                 // sneaky user trying to get around 1 blog limit that applies
113
// only when group blogging is disabled
114
return mapping.findForward("access-denied");
115             }
116         }
117         
118         request.setAttribute("model",
119                 new CreateWebsitePageModel(request, response, mapping, null));
120         
121         return forward;
122     }
123     
124     
125     /** Save new website created by user */
126     public ActionForward save(
127             ActionMapping mapping,
128             ActionForm actionForm,
129             HttpServletRequest JavaDoc request,
130             HttpServletResponse JavaDoc response)
131             throws Exception JavaDoc {
132         
133         CreateWebsiteForm form = (CreateWebsiteForm)actionForm;
134         ActionMessages msgs = new ActionMessages();
135         ActionMessages errors = validate(form, new ActionErrors());
136         ActionForward forward = mapping.findForward("yourWebsites");
137         Roller roller = RollerFactory.getRoller();
138         WebsiteData website = null;
139         if (!errors.isEmpty()) {
140             saveErrors(request, errors);
141             forward = mapping.findForward("createWebsite.page");
142         } else try {
143             RollerContext rollerContext = RollerContext.getRollerContext();
144             UserData user =
145                     RollerSession.getRollerSession(request).getAuthenticatedUser();
146             UserManager mgr = roller.getUserManager();
147             
148             if (!RollerConfig.getBooleanProperty("groupblogging.enabled")) {
149                 List JavaDoc permissions = roller.getUserManager().getAllPermissions(user);
150                 if (permissions.size() > 0) {
151                     // sneaky user trying to get around 1 blog limit that applies
152
// only when group blogging is disabled
153
return mapping.findForward("access-denied");
154                 }
155             }
156             
157             WebsiteData wd = new WebsiteData(
158                     form.getHandle(),
159                     user,
160                     form.getName(),
161                     form.getDescription(),
162                     form.getEmailAddress(),
163                     form.getEmailAddress(),
164                     form.getTheme(),
165                     form.getLocale(),
166                     form.getTimeZone());
167             
168             try {
169                 String JavaDoc def = RollerRuntimeConfig.getProperty("users.editor.pages");
170                 String JavaDoc[] defs = Utilities.stringToStringArray(def,",");
171                 wd.setEditorPage(defs[0]);
172             } catch (Exception JavaDoc ex) {
173                 log.error("ERROR setting default editor page for weblog", ex);
174             }
175             
176             mgr.addWebsite(wd);
177             
178             RollerFactory.getRoller().flush();
179             
180             request.setAttribute("model",
181                     new CreateWebsitePageModel(request, response, mapping, website));
182             
183             msgs.add(ActionMessages.GLOBAL_MESSAGE,
184                     new ActionMessage("createWebsite.created", form.getHandle()));
185             saveMessages(request, msgs);
186         } catch (RollerException e) {
187             errors.add(ActionErrors.GLOBAL_ERROR,
188                     new ActionError(e.getMessage()));
189             saveErrors(request, errors);
190             mLogger.error("ERROR in createWebsite", e);
191         }
192         
193         request.setAttribute("model",
194                 new CreateWebsitePageModel(request, response, mapping, website));
195         
196         return forward;
197     }
198     
199     
200     private ActionMessages validate(CreateWebsiteForm form, ActionErrors messages)
201             throws RollerException {
202         
203         String JavaDoc allowed = RollerConfig.getProperty("username.allowedChars");
204         if(allowed == null || allowed.trim().length() == 0) {
205             allowed = DEFAULT_ALLOWED_CHARS;
206         }
207         String JavaDoc safe = CharSetUtils.keep(form.getHandle(), allowed);
208         
209         if (form.getHandle() == null || "".equals(form.getHandle().trim())) {
210             messages.add( ActionErrors.GLOBAL_ERROR,
211                     new ActionError("createWeblog.error.missingHandle"));
212         } else if (!safe.equals(form.getHandle()) ) {
213             messages.add( ActionErrors.GLOBAL_ERROR,
214                     new ActionError("createWeblog.error.invalidHandle"));
215         }
216         if (form.getEmailAddress() == null || "".equals(form.getEmailAddress().trim())) {
217             messages.add( ActionErrors.GLOBAL_ERROR,
218                     new ActionError("createWeblog.error.missingEmailAddress"));
219         }
220         
221         Roller roller = RollerFactory.getRoller();
222         if (roller.getUserManager().getWebsiteByHandle(form.getHandle()) != null) {
223             messages.add(ActionErrors.GLOBAL_ERROR,
224                     new ActionError("createWeblog.error.handleExists"));
225         }
226         return messages;
227     }
228     
229     
230     public static class CreateWebsitePageModel extends BasePageModel {
231         
232         private List JavaDoc themes;
233         private String JavaDoc contextURL = null;
234         private String JavaDoc weblogURL = null;
235         private String JavaDoc rssURL = null;
236         private WebsiteData website = null;
237         public CreateWebsitePageModel(HttpServletRequest JavaDoc request,
238                 HttpServletResponse JavaDoc response, ActionMapping mapping, WebsiteData wd)
239                 throws RollerException {
240             super("createWebsite.title", request, response, mapping);
241             RollerContext rollerContext = RollerContext.getRollerContext();
242             Roller roller = RollerFactory.getRoller();
243             ThemeManager themeMgr = roller.getThemeManager();
244             themes = themeMgr.getEnabledThemesList();
245             if (wd != null) {
246                 contextURL = RollerRuntimeConfig.getAbsoluteContextURL();
247                 weblogURL = wd.getURL();
248                 rssURL = contextURL + "/rss/" + wd.getHandle();
249                 website = wd;
250             }
251         }
252         public String JavaDoc getAbsoluteURL() {
253             return RollerRuntimeConfig.getAbsoluteContextURL();
254         }
255         public String JavaDoc getContextURL() {
256             return contextURL;
257         }
258         public void setContextURL(String JavaDoc contextURL) {
259             this.contextURL = contextURL;
260         }
261         public String JavaDoc getRssURL() {
262             return rssURL;
263         }
264         public void setRssURL(String JavaDoc rssURL) {
265             this.rssURL = rssURL;
266         }
267         public List JavaDoc getThemes() {
268             return themes;
269         }
270         public void setThemes(List JavaDoc themes) {
271             this.themes = themes;
272         }
273         public String JavaDoc getWeblogURL() {
274             return weblogURL;
275         }
276         public void setWeblogURL(String JavaDoc weblogURL) {
277             this.weblogURL = weblogURL;
278         }
279         public WebsiteData getWebsite() {
280             return website;
281         }
282         public void setWebsite(WebsiteData website) {
283             this.website = website;
284         }
285     }
286     
287 }
288
Popular Tags