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