File Source: ModifyUser.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.admin;
    20  
    21  import org.apache.commons.lang.StringUtils;
    22  import org.apache.commons.logging.Log;
    23  import org.apache.commons.logging.LogFactory;
    24  import org.apache.roller.weblogger.WebloggerException;
    25  import org.apache.roller.weblogger.business.WebloggerFactory;
    26  import org.apache.roller.weblogger.business.UserManager;
    27  import org.apache.roller.weblogger.pojos.User;
    28  import org.apache.roller.weblogger.ui.core.RollerContext;
    29  import org.apache.roller.weblogger.ui.struts2.util.UIAction;
    30  
    31  
    32  /**
    33   * Action that allows an admin to modify a users profile.
    34   */
    35  public class ModifyUser extends UIAction {
    36      
             /* 
    P/P       *  Method: org.apache.roller.weblogger.ui.struts2.admin.ModifyUser__static_init
              * 
              *  Postconditions:
              *    init'ed(log)
              */
    37      private static Log log = LogFactory.getLog(ModifyUser.class);
    38      
    39      // user we are modifying
    40      private User user = new User();
    41      
    42      // a bean to store our form data
    43      private CreateUserBean bean = new CreateUserBean();
    44      
    45      private String userName = null;
    46      
    47      
             /* 
    P/P       *  Method: void org.apache.roller.weblogger.ui.struts2.admin.ModifyUser()
              * 
              *  Presumptions:
              *    init'ed(org/apache/roller/weblogger/ui/struts2/admin/CreateUserBean.java.lang.Boolean.TRUE)
              * 
              *  Postconditions:
              *    this.actionName == &"modifyUser"
              *    this.bean == &new CreateUserBean(ModifyUser#2)
              *    this.desiredMenu == &"admin"
              *    this.pageTitle == &"userAdmin.title.editUser"
              *    this.user == &new User(ModifyUser#1)
              *    this.userName == null
              *    this.bean.activationCode == null
              *    this.bean.emailAddress == null
              *    this.bean.fullName == null
              *    this.bean.id == null
              *    ...
              */
    48      public ModifyUser() {
    49          this.actionName = "modifyUser";
    50          this.desiredMenu = "admin";
    51          this.pageTitle = "userAdmin.title.editUser";
    52      }
    53      
    54      
    55      // admin role required
    56      public String requiredUserRole() {
                 /* 
    P/P           *  Method: String requiredUserRole()
                  * 
                  *  Postconditions:
                  *    return_value == &"admin"
                  */
    57          return "admin";
    58      }
    59      
    60      // no weblog required
    61      public boolean isWeblogRequired() { 
                 /* 
    P/P           *  Method: bool isWeblogRequired()
                  * 
                  *  Postconditions:
                  *    return_value == 0
                  */
    62          return false;
    63      }
    64      
    65      
    66      // prepare for action by loading user object we are modifying
    67      public void myPrepare() {
    68          
    69          // load the user object we are modifying
                 /* 
    P/P           *  Method: void myPrepare()
                  * 
                  *  Preconditions:
                  *    init'ed(this.userName)
                  *    (soft) log != null
                  *    (soft) this.bean != null
                  *    (soft) init'ed(this.bean.id)
                  * 
                  *  Presumptions:
                  *    org.apache.roller.weblogger.business.Weblogger:getUserManager(...)@72 != null
                  *    org.apache.roller.weblogger.business.Weblogger:getUserManager(...)@82 != null
                  *    org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@72 != null
                  *    org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@82 != null
                  * 
                  *  Postconditions:
                  *    possibly_updated(this.user)
                  * 
                  *  Test Vectors:
                  *    this.bean.id: Addr_Set{null}, Inverse{null}
                  *    this.userName: Addr_Set{null}, Inverse{null}
                  */
    70          if(getUserName() != null) {
    71              try {
    72                  UserManager mgr = WebloggerFactory.getWeblogger().getUserManager();
    73                  
    74                  // use enabled = 'null' to get both enabled and disabled users
    75                  setUser(mgr.getUserByUserName(getUserName(), null));
    76                  
    77              } catch(Exception e) {
    78                  log.error("Error looking up user - "+getUserName(), e);
    79              }
    80          } else if(getBean().getId() != null) {
    81              try {
    82                  UserManager mgr = WebloggerFactory.getWeblogger().getUserManager();
    83                  setUser(mgr.getUser(getBean().getId()));
    84              } catch(Exception e) {
    85                  log.error("Error looking up user - "+getBean().getId(), e);
    86              }
    87          }
    88      }
    89      
    90      
    91      /**
    92       * Show admin user edit page.
    93       */
    94      public String execute() {
    95          
                 /* 
    P/P           *  Method: String execute()
                  * 
                  *  Preconditions:
                  *    init'ed(this.user)
                  *    (soft) this.bean != null
                  * 
                  *  Postconditions:
                  *    return_value in Addr_Set{&"input",&"error"}
                  *    possibly_updated(this.bean.activationCode)
                  *    possibly_updated(this.bean.administrator)
                  *    possibly_updated(this.bean.emailAddress)
                  *    possibly_updated(this.bean.enabled)
                  *    possibly_updated(this.bean.fullName)
                  *    possibly_updated(this.bean.id)
                  *    possibly_updated(this.bean.locale)
                  *    possibly_updated(this.bean.password)
                  *    possibly_updated(this.bean.screenName)
                  *    ...
                  * 
                  *  Test Vectors:
                  *    this.user: Addr_Set{null}, Inverse{null}
                  *    org.apache.roller.weblogger.pojos.User:getId(...)@96: Addr_Set{null}, Inverse{null}
                  */
    96          if (getUser() != null && getUser().getId() != null) {
    97              // populate form data from user profile data
    98              getBean().copyFrom(getUser(), getLocale());
    99          } else {
   100              addError("userAdmin.error.userNotFound");
   101              return ERROR;
   102          }
   103  
   104          return INPUT;
   105      }
   106      
   107      
   108      /**
   109       * Save modified user profile.
   110       */
   111      public String save() {
   112          
   113          // custom validation
                 /* 
    P/P           *  Method: String save()
                  * 
                  *  Preconditions:
                  *    this.bean != null
                  *    init'ed(this.bean.emailAddress)
                  *    this.user != null
                  *    (soft) log != null
                  *    (soft) init'ed(this.bean.activationCode)
                  *    (soft) init'ed(this.bean.administrator)
                  *    (soft) this.bean.enabled != null
                  *    (soft) init'ed(this.bean.fullName)
                  *    (soft) init'ed(this.bean.locale)
                  *    (soft) init'ed(this.bean.password)
                  *    ...
                  * 
                  *  Presumptions:
                  *    org.apache.roller.weblogger.business.Weblogger:getUserManager(...)@130 != null
                  *    org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@130 != null
                  *    org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@157 != null
                  * 
                  *  Postconditions:
                  *    return_value == &"input"
                  * 
                  *  Test Vectors:
                  *    this.bean.administrator: {1}, {0}
                  *    org.apache.commons.lang.StringUtils:isEmpty(...)@121: {1}, {0}
                  *    org.apache.roller.weblogger.pojos.User:equals(...)@212: {1}, {0}
                  *    org.apache.roller.weblogger.pojos.User:hasRole(...)@133: {0}, {1}
                  *    org.apache.roller.weblogger.pojos.User:hasRole(...)@142: {1}, {0}
                  *    org.apache.roller.weblogger.ui.struts2.admin.ModifyUser:hasActionErrors(...)@116: {1}, {0}
                  */
   114          myValidate();
   115          
   116          if (!hasActionErrors()) {
   117              
   118              getBean().copyTo(getUser(), getLocale());
   119              
   120              // reset password if set
   121              if (!StringUtils.isEmpty(getBean().getPassword())) {
   122                  try {
   123                      getUser().resetPassword(getBean().getPassword());
   124                  } catch (WebloggerException e) {
   125                      addMessage("yourProfile.passwordResetError");
   126                  }
   127              }
   128              
   129              try {
   130                  UserManager mgr = WebloggerFactory.getWeblogger().getUserManager();
   131                  
   132                  // grant/revoke admin role if needed
   133                  if (getUser().hasRole("admin") && !getBean().isAdministrator()) {
   134                      
   135                      if (!isUserEditingSelf()) {
   136                          // revoke role
   137                          mgr.revokeRole("admin", getUser());
   138                      } else {
   139                          addError("userAdmin.cantChangeOwnRole");
   140                      }
   141                      
   142                  } else if(!getUser().hasRole("admin") && getBean().isAdministrator()) {
   143                      
   144                      if (!isUserEditingSelf()) {
   145                          // grant role
   146                          getUser().grantRole("admin");
   147                      } else {
   148                          addError("userAdmin.cantChangeOwnRole"); 
   149                      }
   150                      
   151                  }
   152              
   153                  RollerContext.flushAuthenticationUserCache(getUser().getUserName());
   154  
   155                  // save the updated profile
   156                  mgr.saveUser(getUser());
   157                  WebloggerFactory.getWeblogger().flush();
   158                  
   159                  addMessage("userAdmin.userSaved");
   160                                  
   161                  return INPUT;
   162                  
   163              } catch (WebloggerException ex) {
   164                  log.error("ERROR in action", ex);
   165                  // TODO: i18n
   166                  addError("userAdmin.error.unexpectedError");
   167              }
   168              
   169          }
   170          
   171          return INPUT;
   172      }
   173      
   174      
   175      // TODO: replace with struts2 validation
   176      private void myValidate() {
   177          
                 /* 
    P/P           *  Method: void myValidate()
                  * 
                  *  Preconditions:
                  *    this.bean != null
                  *    init'ed(this.bean.emailAddress)
                  *    this.user != null
                  * 
                  *  Test Vectors:
                  *    org.apache.commons.lang.StringUtils:isEmpty(...)@181: {0}, {1}
                  *    org.apache.roller.weblogger.pojos.User:getId(...)@178: Inverse{null}, Addr_Set{null}
                  */
   178          if(getUser().getId() == null) {
   179              addError("userAdmin.error.userNotFound");
   180          }
   181          if (StringUtils.isEmpty(getBean().getEmailAddress())) {
   182              addError("error.add.user.missingEmailAddress");
   183          }
   184      }
   185      
   186      
   187      public CreateUserBean getBean() {
                 /* 
    P/P           *  Method: CreateUserBean getBean()
                  * 
                  *  Preconditions:
                  *    init'ed(this.bean)
                  * 
                  *  Postconditions:
                  *    return_value == this.bean
                  *    init'ed(return_value)
                  */
   188          return bean;
   189      }
   190  
   191      public void setBean(CreateUserBean bean) {
                 /* 
    P/P           *  Method: void setBean(CreateUserBean)
                  * 
                  *  Postconditions:
                  *    this.bean == bean
                  *    init'ed(this.bean)
                  */
   192          this.bean = bean;
   193      }
   194  
   195      public User getUser() {
                 /* 
    P/P           *  Method: User getUser()
                  * 
                  *  Preconditions:
                  *    init'ed(this.user)
                  * 
                  *  Postconditions:
                  *    return_value == this.user
                  *    init'ed(return_value)
                  */
   196          return user;
   197      }
   198  
   199      public void setUser(User user) {
                 /* 
    P/P           *  Method: void setUser(User)
                  * 
                  *  Postconditions:
                  *    this.user == user
                  *    init'ed(this.user)
                  */
   200          this.user = user;
   201      }
   202  
   203      public String getUserName() {
                 /* 
    P/P           *  Method: String getUserName()
                  * 
                  *  Preconditions:
                  *    init'ed(this.userName)
                  * 
                  *  Postconditions:
                  *    return_value == this.userName
                  *    init'ed(return_value)
                  */
   204          return userName;
   205      }
   206  
   207      public void setUserName(String userName) {
                 /* 
    P/P           *  Method: void setUserName(String)
                  * 
                  *  Postconditions:
                  *    this.userName == userName
                  *    init'ed(this.userName)
                  */
   208          this.userName = userName;
   209      }
   210      
   211      public boolean isUserEditingSelf() {
                 /* 
    P/P           *  Method: bool isUserEditingSelf()
                  * 
                  *  Preconditions:
                  *    this.user != null
                  * 
                  *  Postconditions:
                  *    init'ed(return_value)
                  */
   212          return getUser().equals(getAuthenticatedUser());
   213      }
   214      
   215  }








SofCheck Inspector Build Version : 2.18479
ModifyUser.java 2009-Jan-02 14:24:58
ModifyUser.class 2009-Sep-04 03:12:45