1 package org.apache.turbine.util.security; 2 3 4 /* 5 * Licensed to the Apache Software Foundation (ASF) under one 6 * or more contributor license agreements. See the NOTICE file 7 * distributed with this work for additional information 8 * regarding copyright ownership. The ASF licenses this file 9 * to you under the Apache License, Version 2.0 (the 10 * "License"); you may not use this file except in compliance 11 * with the License. You may obtain a copy of the License at 12 * 13 * http://www.apache.org/licenses/LICENSE-2.0 14 * 15 * Unless required by applicable law or agreed to in writing, 16 * software distributed under the License is distributed on an 17 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 18 * KIND, either express or implied. See the License for the 19 * specific language governing permissions and limitations 20 * under the License. 21 */ 22 23 24 import java.util.Collection; 25 import java.util.Iterator; 26 27 import org.apache.commons.lang.StringUtils; 28 import org.apache.turbine.om.security.Permission; 29 30 /** 31 * This class represents a set of Permissions. It makes it easy to 32 * build a UI that would allow someone to add a group of Permissions 33 * to a Role. It enforces that only 34 * Permission objects are allowed in the set and only relevant methods 35 * are available. 36 * 37 * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a> 38 * @author <a href="mailto:bmclaugh@algx.net">Brett McLaughlin</a> 39 * @author <a href="mailto:marco@intermeta.de">Marco Knüttel</a> 40 * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a> 41 * @version $Id: PermissionSet.java 1073174 2011-02-21 22:18:45Z tv $ 42 */ 43 public class PermissionSet 44 extends SecuritySet<Permission> 45 { 46 /** Serial version */ 47 private static final long serialVersionUID = 7740960537240820226L; 48 49 /** 50 * Constructs an empty PermissionSet 51 */ 52 public PermissionSet() 53 { 54 super(); 55 } 56 57 /** 58 * Constructs a new PermissionSet with specified contents. 59 * 60 * If the given collection contains multiple objects that are 61 * identical WRT equals() method, some objects will be overwritten. 62 * 63 * @param permissions A collection of permissions to be contained in the set. 64 */ 65 public PermissionSet(Collection<Permission> permissions) 66 { 67 super(); 68 add(permissions); 69 } 70 71 /** 72 * Adds a Permission to this PermissionSet. 73 * 74 * @param permission A Permission. 75 * @return True if Permission was added; false if PermissionSet 76 * already contained the Permission. 77 */ 78 public boolean add(Permission permission) 79 { 80 boolean res = contains(permission); 81 nameMap.put(permission.getName(), permission); 82 idMap.put(permission.getIdAsObj(), permission); 83 return res; 84 } 85 86 /** 87 * Adds the Permissions in a Collection to this PermissionSet. 88 * 89 * @param permissions A Collection of Permissions. 90 * @return True if this PermissionSet changed as a result; false 91 * if no change to this PermissionSet occurred (this PermissionSet 92 * already contained all members of the added PermissionSet). 93 */ 94 public boolean add(Collection<Permission> permissions) 95 { 96 boolean res = false; 97 for (Permission p : permissions) 98 { 99 res |= add(p); 100 } 101 return res; 102 } 103 104 /** 105 * Adds the Permissions in another PermissionSet to this 106 * PermissionSet. 107 * 108 * @param permissionSet A PermissionSet. 109 * @return True if this PermissionSet changed as a result; false 110 * if no change to this PermissionSet occurred (this PermissionSet 111 * already contained all members of the added PermissionSet). 112 */ 113 public boolean add(PermissionSet permissionSet) 114 { 115 boolean res = false; 116 for(Permission p : permissionSet) 117 { 118 res |= add(p); 119 } 120 return res; 121 } 122 123 /** 124 * Removes a Permission from this PermissionSet. 125 * 126 * @param permission A Permission. 127 * @return True if this PermissionSet contained the Permission 128 * before it was removed. 129 */ 130 public boolean remove(Permission permission) 131 { 132 boolean res = contains(permission); 133 nameMap.remove(permission.getName()); 134 idMap.remove(permission.getIdAsObj()); 135 return res; 136 } 137 138 /** 139 * Checks whether this PermissionSet contains a Permission. 140 * 141 * @param permission A Permission. 142 * @return True if this PermissionSet contains the Permission, 143 * false otherwise. 144 */ 145 public boolean contains(Permission permission) 146 { 147 return nameMap.containsValue(permission); 148 } 149 150 /** 151 * Returns a Permission with the given name, if it is contained in 152 * this PermissionSet. 153 * 154 * @param permissionName Name of Permission. 155 * @return Permission if argument matched a Permission in this 156 * PermissionSet; null if no match. 157 */ 158 public Permission getPermissionByName(String permissionName) 159 { 160 return (StringUtils.isNotEmpty(permissionName)) 161 ? (Permission) nameMap.get(permissionName) : null; 162 } 163 164 /** 165 * Returns a Permission with the given id, if it is contained in 166 * this PermissionSet. 167 * 168 * @param permissionId Id of the Permission. 169 * @return Permission if argument matched a Permission in this 170 * PermissionSet; null if no match. 171 */ 172 public Permission getPermissionById(int permissionId) 173 { 174 return (permissionId != 0) 175 ? (Permission) idMap.get(new Integer(permissionId)) : null; 176 } 177 178 /** 179 * Returns an Array of Permissions in this PermissionSet. 180 * 181 * @return An Array of Permission Objects. 182 */ 183 public Permission[] getPermissionsArray() 184 { 185 return getSet().toArray(new Permission[0]); 186 } 187 188 /** 189 * Print out a PermissionSet as a String 190 * 191 * @returns The Permission Set as String 192 * 193 */ 194 @Override 195 public String toString() 196 { 197 StringBuffer sb = new StringBuffer(); 198 sb.append("PermissionSet: "); 199 200 for(Iterator<Permission> it = iterator(); it.hasNext();) 201 { 202 Permission p = it.next(); 203 sb.append('['); 204 sb.append(p.getName()); 205 sb.append(" -> "); 206 sb.append(p.getIdAsObj()); 207 sb.append(']'); 208 if (it.hasNext()) 209 { 210 sb.append(", "); 211 } 212 } 213 214 return sb.toString(); 215 } 216 }