File Source: Members.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.editor;
    20  
    21  import java.util.ArrayList;
    22  import java.util.Collections;
    23  import java.util.List;
    24  import java.util.Map;
    25  import org.apache.commons.logging.Log;
    26  import org.apache.commons.logging.LogFactory;
    27  import org.apache.roller.weblogger.business.WebloggerFactory;
    28  import org.apache.roller.weblogger.business.UserManager;
    29  import org.apache.roller.weblogger.pojos.WeblogPermission;
    30  import org.apache.roller.weblogger.pojos.User;
    31  import org.apache.roller.weblogger.ui.struts2.util.UIAction;
    32  import org.apache.struts2.interceptor.ParameterAware;
    33  
    34  
    35  /**
    36   * Allows weblog admin to list/modify member permissions.
    37   *
    38   * TODO: fix bug in UserManager which doesn't remove permissions from the
    39   * website.permissions collection when a permission is deleted.
    40   */
    41  public class Members extends UIAction implements ParameterAware {
    42      
             /* 
    P/P       *  Method: org.apache.roller.weblogger.ui.struts2.editor.Members__static_init
              * 
              *  Postconditions:
              *    init'ed(log)
              */
    43      private static Log log = LogFactory.getLog(Members.class);
    44      
    45      // raw parameters from request
    46      private Map parameters = Collections.EMPTY_MAP;
    47      
    48      
             /* 
    P/P       *  Method: void org.apache.roller.weblogger.ui.struts2.editor.Members()
              * 
              *  Preconditions:
              *    log != null
              * 
              *  Presumptions:
              *    init'ed(java.util.Collections.EMPTY_MAP)
              * 
              *  Postconditions:
              *    this.actionName == &"members"
              *    this.desiredMenu == &"editor"
              *    this.pageTitle == &"memberPermissions.title"
              *    this.parameters == java.util.Collections.EMPTY_MAP
              *    (soft) init'ed(this.parameters)
              */
    49      public Members() {
    50          log.debug("Instantiating members action");
    51          
    52          this.actionName = "members";
    53          this.desiredMenu = "editor";
    54          this.pageTitle = "memberPermissions.title";
    55      }
    56      
    57      
    58      // admin perms required
    59      public short requiredWeblogPermissions() {
                 /* 
    P/P           *  Method: short requiredWeblogPermissions()
                  * 
                  *  Presumptions:
                  *    init'ed(org.apache.roller.weblogger.pojos.WeblogPermission.ADMIN)
                  * 
                  *  Postconditions:
                  *    return_value == org.apache.roller.weblogger.pojos.WeblogPermission.ADMIN
                  *    (soft) init'ed(return_value)
                  */
    60          return WeblogPermission.ADMIN;
    61      }
    62      
    63      
    64      public String execute() {
    65          
                 /* 
    P/P           *  Method: String execute()
                  * 
                  *  Preconditions:
                  *    log != null
                  * 
                  *  Postconditions:
                  *    return_value == &"list"
                  */
    66          log.debug("Showing weblog members page");
    67          
    68          return LIST;
    69      }
    70      
    71      
    72      public String save() {
    73          
                 /* 
    P/P           *  Method: String save()
                  * 
                  *  Preconditions:
                  *    log != null
                  *    (soft) this.parameters != null
                  * 
                  *  Presumptions:
                  *    java.util.Iterator:next(...)@90 != null
                  *    org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@76 != null
                  *    org.apache.roller.weblogger.pojos.Weblog:getPermissions(...)@78 != null
                  *    org.apache.roller.weblogger.ui.struts2.editor.Members:getActionWeblog(...)@118 != null
                  *    org.apache.roller.weblogger.ui.struts2.editor.Members:getActionWeblog(...)@78 != null
                  * 
                  *  Postconditions:
                  *    return_value == &"list"
                  * 
                  *  Test Vectors:
                  *    java.util.Iterator:hasNext(...)@83: {0}, {1}
                  *    java.util.Iterator:hasNext(...)@90: {0}, {1}
                  */
    74          log.debug("Attempting to processing weblog permissions updates");
    75          
    76          UserManager userMgr = WebloggerFactory.getWeblogger().getUserManager();
    77          
    78          List<WeblogPermission> permissions = getActionWeblog().getPermissions();
    79          
    80          // we have to copy the permissions list so that when we remove permissions
    81          // below we don't get ConcurrentModificationExceptions
    82          List<WeblogPermission> permsList = new ArrayList();
    83          for( WeblogPermission perm : permissions ) {
    84              permsList.add(perm);
    85          }
    86          
    87          int removed = 0;
    88          int changed = 0;
    89          try {
    90              for( WeblogPermission perms : permsList ) {
    91                  
    92                  String sval = getParameter("perm-" + perms.getId());
+   93                  if (sval != null) {
+   94                      short val = Short.parseShort(sval);
    95                      User user = getAuthenticatedUser();
    96                      if (perms.getUser().getId().equals(user.getId()) && 
    97                              val < perms.getPermissionMask()) {
    98                          addError("memberPermissions.noSelfDemotions");
    99                      } else if (val != perms.getPermissionMask()) {
   100                          if (val == -1) {
   101                              userMgr.removePermissions(perms);
   102                              removed++;
   103                          } else {
   104                              perms.setPermissionMask(val);
   105                              userMgr.savePermissions(perms);
   106                              changed++;
   107                          }
   108                      }
   109                  }
   110              }
   111              
+  112              if (removed > 0 || changed > 0) {
+  113                  log.debug("Weblog permissions updated, flushing changes");
   114                  
   115                  WebloggerFactory.getWeblogger().flush();
   116              }
   117          } catch (Exception ex) {
   118              log.error("Error saving permissions on weblog - "+getActionWeblog().getHandle(), ex);
   119              // TODO: i18n
   120              addError("Error saving permissions");
   121          }
   122          
+  123          if (removed > 0) {
+  124              addMessage("memberPermissions.membersRemoved", ""+removed);
   125          }
+  126          if (changed > 0) {
+  127              addMessage("memberPermissions.membersChanged", ""+changed);
   128          }
   129          
   130          return LIST;
   131      }
   132      
   133      
   134      // convenience for accessing a single parameter with a single value
   135      public String getParameter(String key) {
                 /* 
    P/P           *  Method: String getParameter(String)
                  * 
                  *  Preconditions:
                  *    (soft) this.parameters != null
                  * 
                  *  Postconditions:
                  *    return_value == null
                  * 
                  *  Test Vectors:
                  *    key: Addr_Set{null}, Inverse{null}
                  *    java.util.Map:get(...)@137: Addr_Set{null}, Inverse{null}
                  *    value.length@137: {0}, {1..+Inf}
                  */
   136          if(key != null) {
   137              String[] value = (String[]) getParameters().get(key);
   138              if(value != null && value.length > 0) {
   139                  return value[0];
   140              }
   141          }
   142          return null;
   143      }
   144      
   145      
   146      public Map getParameters() {
                 /* 
    P/P           *  Method: Map getParameters()
                  * 
                  *  Preconditions:
                  *    init'ed(this.parameters)
                  * 
                  *  Postconditions:
                  *    return_value == this.parameters
                  *    init'ed(return_value)
                  */
   147          return parameters;
   148      }
   149  
   150      public void setParameters(Map parameters) {
                 /* 
    P/P           *  Method: void setParameters(Map)
                  * 
                  *  Postconditions:
                  *    this.parameters == parameters
                  *    init'ed(this.parameters)
                  */
   151          this.parameters = parameters;
   152      }
   153  }








SofCheck Inspector Build Version : 2.18479
Members.java 2009-Jan-02 14:25:08
Members.class 2009-Sep-04 03:12:45