File Source: CreateWeblog.java
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.weblogger.ui.struts2.core;
20
21 import java.util.List;
22 import org.apache.commons.lang.CharSetUtils;
23 import org.apache.commons.lang.StringUtils;
24 import org.apache.commons.logging.Log;
25 import org.apache.commons.logging.LogFactory;
26 import org.apache.roller.weblogger.WebloggerException;
27 import org.apache.roller.weblogger.config.WebloggerConfig;
28 import org.apache.roller.weblogger.config.WebloggerRuntimeConfig;
29 import org.apache.roller.weblogger.business.WebloggerFactory;
30 import org.apache.roller.weblogger.business.themes.ThemeManager;
31 import org.apache.roller.weblogger.business.UserManager;
32 import org.apache.roller.weblogger.pojos.User;
33 import org.apache.roller.weblogger.pojos.Weblog;
34 import org.apache.roller.weblogger.ui.struts2.util.UIAction;
35 import org.apache.roller.weblogger.util.Utilities;
36 import org.apache.struts2.interceptor.validation.SkipValidation;
37
38
39 /**
40 * Allows user to create a new website.
41 */
42 public class CreateWeblog extends UIAction {
43
/*
P/P * Method: org.apache.roller.weblogger.ui.struts2.core.CreateWeblog__static_init
*
* Postconditions:
* init'ed(log)
*/
44 private static Log log = LogFactory.getLog(CreateWeblog.class);
45
46 private CreateWeblogBean bean = new CreateWeblogBean();
47
48
/*
P/P * Method: void org.apache.roller.weblogger.ui.struts2.core.CreateWeblog()
*
* Postconditions:
* this.bean == &new CreateWeblogBean(CreateWeblog#1)
* this.pageTitle == &"createWebsite.title"
* new CreateWeblogBean(CreateWeblog#1) num objects == 1
*/
49 public CreateWeblog() {
50 this.pageTitle = "createWebsite.title";
51 }
52
53
54 // override default security, we do not require an action weblog
55 public boolean isWeblogRequired() {
/*
P/P * Method: bool isWeblogRequired()
*
* Postconditions:
* return_value == 0
*/
56 return false;
57 }
58
59
60 @SkipValidation
61 public String execute() {
62
/*
P/P * Method: String execute()
*
* Preconditions:
* (soft) log != null
* (soft) this.bean != null
*
* Presumptions:
* org.apache.roller.weblogger.business.UserManager:getAllPermissions(...)@68 != null
* org.apache.roller.weblogger.business.Weblogger:getUserManager(...)@67 != null
* org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@67 != null
* org.apache.roller.weblogger.ui.struts2.core.CreateWeblog:getAuthenticatedUser(...)@63 != null
*
* Postconditions:
* return_value in Addr_Set{&"menu",&"input"}
* possibly_updated(this.bean.emailAddress)
* possibly_updated(this.bean.locale)
* possibly_updated(this.bean.timeZone)
*/
63 User user = getAuthenticatedUser();
64
65 try {
66 if (!WebloggerConfig.getBooleanProperty("groupblogging.enabled")) {
67 UserManager mgr = WebloggerFactory.getWeblogger().getUserManager();
68 List permissions = mgr.getAllPermissions(user);
69 if (permissions.size() > 0) {
70 // sneaky user trying to get around 1 blog limit that applies
71 // only when group blogging is disabled
72 // TODO: i18n
73 addError("Sorry, you are only allowed to have 1 weblog.");
74 return "menu";
75 }
76 }
77 } catch (WebloggerException ex) {
78 log.error("error checking for existing weblogs count", ex);
79 }
80
81 // pre-populate with some logical defaults
82 getBean().setLocale(user.getLocale());
83 getBean().setTimeZone(user.getTimeZone());
84 getBean().setEmailAddress(user.getEmailAddress());
85
86 return INPUT;
87 }
88
89
90 public String save() {
91
/*
P/P * Method: String save()
*
* Preconditions:
* (soft) log != null
* (soft) init'ed(this.bean.handle)
* (soft) init'ed(org/apache/roller/weblogger/ui/struts2/core/Register.DEFAULT_ALLOWED_CHARS)
* (soft) this.bean != null
* (soft) init'ed(this.bean.description)
* (soft) init'ed(this.bean.emailAddress)
* (soft) init'ed(this.bean.locale)
* (soft) init'ed(this.bean.name)
* (soft) init'ed(this.bean.theme)
* (soft) init'ed(this.bean.timeZone)
*
* Presumptions:
* defs.length@126 >= 1
* org.apache.roller.weblogger.business.UserManager:getAllPermissions(...)@96 != null
* org.apache.roller.weblogger.business.Weblogger:getUserManager(...)@131 != null
* org.apache.roller.weblogger.business.Weblogger:getUserManager(...)@95 != null
* org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@131 != null
* ...
*
* Postconditions:
* return_value in Addr_Set{&"menu",&"success",&"input"}
* this.bean.handle == One-of{old this.bean.handle, null}
* (soft) init'ed(this.bean.handle)
*
* Test Vectors:
* org.apache.roller.weblogger.ui.struts2.core.CreateWeblog:hasActionErrors(...)@111: {1}, {0}
*/
92 User user = getAuthenticatedUser();
93 try {
94 if (!WebloggerConfig.getBooleanProperty("groupblogging.enabled")) {
95 UserManager mgr = WebloggerFactory.getWeblogger().getUserManager();
96 List permissions = mgr.getAllPermissions(user);
97 if (permissions.size() > 0) {
98 // sneaky user trying to get around 1 blog limit that applies
99 // only when group blogging is disabled
100 // TODO: i18n
101 addError("Sorry, you are only allowed to have 1 weblog.");
102 return "menu";
103 }
104 }
105 } catch (WebloggerException ex) {
106 log.error("error checking for existing weblogs count", ex);
107 }
108
109 myValidate();
110
111 if(!hasActionErrors()) {
112
113 Weblog wd = new Weblog(
114 getBean().getHandle(),
115 user,
116 getBean().getName(),
117 getBean().getDescription(),
118 getBean().getEmailAddress(),
119 getBean().getEmailAddress(),
120 getBean().getTheme(),
121 getBean().getLocale(),
122 getBean().getTimeZone());
123
124 // pick a weblog editor for this weblog
125 String def = WebloggerRuntimeConfig.getProperty("users.editor.pages");
126 String[] defs = Utilities.stringToStringArray(def,",");
127 wd.setEditorPage(defs[0]);
128
129 try {
130 // add weblog and flush
131 UserManager mgr = WebloggerFactory.getWeblogger().getUserManager();
132 mgr.addWebsite(wd);
133 WebloggerFactory.getWeblogger().flush();
134
135 // tell the user their weblog was created
136 addMessage("createWebsite.created", getBean().getHandle());
137
138 return SUCCESS;
139
140 } catch (WebloggerException e) {
141 log.error("ERROR adding weblog", e);
142 // TODO: error handling
143 addError(e.getMessage());
144 }
145
146 }
147
148 return INPUT;
149 }
150
151
152 public void myValidate() {
153
/*
P/P * Method: void myValidate()
*
* Preconditions:
* init'ed(this.bean.handle)
* this.bean != null
* (soft) log != null
* (soft) init'ed(org/apache/roller/weblogger/ui/struts2/core/Register.DEFAULT_ALLOWED_CHARS)
*
* Presumptions:
* org.apache.commons.lang.CharSetUtils:keep(...)@160 != null
* org.apache.roller.weblogger.business.Weblogger:getUserManager(...)@169 != null
* org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@169 != null
*
* Postconditions:
* this.bean.handle == One-of{old this.bean.handle, null}
* init'ed(this.bean.handle)
*
* Test Vectors:
* java.lang.String:equals(...)@161: {1}, {0}
* java.lang.String:length(...)@155: {1..232-1}, {0}
* org.apache.commons.lang.StringUtils:isEmpty(...)@168: {1}, {0}
* org.apache.roller.weblogger.business.UserManager:getWebsiteByHandle(...)@170: Addr_Set{null}, Inverse{null}
* org.apache.roller.weblogger.config.WebloggerConfig:getProperty(...)@154: Addr_Set{null}, Inverse{null}
*/
154 String allowed = WebloggerConfig.getProperty("username.allowedChars");
155 if(allowed == null || allowed.trim().length() == 0) {
156 allowed = Register.DEFAULT_ALLOWED_CHARS;
157 }
158
159 // make sure handle only contains safe characters
160 String safe = CharSetUtils.keep(getBean().getHandle(), allowed);
161 if (!safe.equals(getBean().getHandle()) ) {
162 addError("createWeblog.error.invalidHandle");
163 }
164
165 // make sure theme was specified and is a valid value
166
167 // make sure handle isn't already taken
168 if(!StringUtils.isEmpty(getBean().getHandle())) try {
169 UserManager mgr = WebloggerFactory.getWeblogger().getUserManager();
170 if (mgr.getWebsiteByHandle(getBean().getHandle()) != null) {
171 addError("createWeblog.error.handleExists");
172 // reset handle
173 getBean().setHandle(null);
174 }
175 } catch (WebloggerException ex) {
176 log.error("error checking for weblog", ex);
177 // TODO: i18n
178 addError("unexpected error");
179 }
180 }
181
182
183 public List getThemes() {
/*
P/P * Method: List getThemes()
*
* Presumptions:
* org.apache.roller.weblogger.business.Weblogger:getThemeManager(...)@184 != null
* org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@184 != null
*
* Postconditions:
* init'ed(return_value)
*/
184 ThemeManager themeMgr = WebloggerFactory.getWeblogger().getThemeManager();
185 return themeMgr.getEnabledThemesList();
186 }
187
188
189 public CreateWeblogBean getBean() {
/*
P/P * Method: CreateWeblogBean getBean()
*
* Preconditions:
* init'ed(this.bean)
*
* Postconditions:
* return_value == this.bean
* init'ed(return_value)
*/
190 return bean;
191 }
192
193 public void setBean(CreateWeblogBean bean) {
/*
P/P * Method: void setBean(CreateWeblogBean)
*
* Postconditions:
* this.bean == bean
* init'ed(this.bean)
*/
194 this.bean = bean;
195 }
196
197 }
SofCheck Inspector Build Version : 2.18479
| CreateWeblog.java |
2009-Jan-02 14:25:20 |
| CreateWeblog.class |
2009-Sep-04 03:12:45 |