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 |