001 package org.apache.turbine.util.security; 002 003 004 /* 005 * Licensed to the Apache Software Foundation (ASF) under one 006 * or more contributor license agreements. See the NOTICE file 007 * distributed with this work for additional information 008 * regarding copyright ownership. The ASF licenses this file 009 * to you under the Apache License, Version 2.0 (the 010 * "License"); you may not use this file except in compliance 011 * with the License. You may obtain a copy of the License at 012 * 013 * http://www.apache.org/licenses/LICENSE-2.0 014 * 015 * Unless required by applicable law or agreed to in writing, 016 * software distributed under the License is distributed on an 017 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 018 * KIND, either express or implied. See the License for the 019 * specific language governing permissions and limitations 020 * under the License. 021 */ 022 023 024 import java.util.Collection; 025 import java.util.Iterator; 026 027 import org.apache.commons.lang.StringUtils; 028 import org.apache.turbine.om.security.Group; 029 030 /** 031 * This class represents a set of Groups. It's useful for building 032 * administration UI. It enforces that only 033 * Group objects are allowed in the set and only relevant methods 034 * are available. 035 * 036 * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a> 037 * @author <a href="mailto:bmclaugh@algx.net">Brett McLaughlin</a> 038 * @author <a href="mailto:marco@intermeta.de">Marco Knüttel</a> 039 * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a> 040 * @version $Id: GroupSet.java 1073174 2011-02-21 22:18:45Z tv $ 041 */ 042 public class GroupSet 043 extends SecuritySet<Group> 044 { 045 /** Serial version */ 046 private static final long serialVersionUID = -80412911083063489L; 047 048 /** 049 * Constructs an empty GroupSet 050 */ 051 public GroupSet() 052 { 053 super(); 054 } 055 056 /** 057 * Constructs a new GroupSet with specified contents. 058 * 059 * If the given collection contains multiple objects that are 060 * identical WRT equals() method, some objects will be overwritten. 061 * 062 * @param groups A collection of groups to be contained in the set. 063 */ 064 public GroupSet(Collection<Group> groups) 065 { 066 super(); 067 add(groups); 068 } 069 070 /** 071 * Adds a Group to this GroupSet. 072 * 073 * @param group A Group. 074 * @return True if Group was added; false if GroupSet 075 * already contained the Group. 076 */ 077 public boolean add(Group group) 078 { 079 boolean res = contains(group); 080 nameMap.put(group.getName(), group); 081 idMap.put(group.getIdAsObj(), group); 082 return res; 083 } 084 085 /** 086 * Adds the Groups in a Collection to this GroupSet. 087 * 088 * @param groups A Collection of Groups. 089 * @return True if this GroupSet changed as a result; false 090 * if no change to this GroupSet occurred (this GroupSet 091 * already contained all members of the added GroupSet). 092 */ 093 public boolean add(Collection<Group> groups) 094 { 095 boolean res = false; 096 for (Group g : groups) 097 { 098 res |= add(g); 099 } 100 return res; 101 } 102 103 /** 104 * Adds the Groups in another GroupSet to this GroupSet. 105 * 106 * @param groupSet A GroupSet. 107 * @return True if this GroupSet changed as a result; false 108 * if no change to this GroupSet occurred (this GroupSet 109 * already contained all members of the added GroupSet). 110 */ 111 public boolean add(GroupSet groupSet) 112 { 113 boolean res = false; 114 for(Group g : groupSet) 115 { 116 res |= add(g); 117 } 118 return res; 119 } 120 121 /** 122 * Removes a Group from this GroupSet. 123 * 124 * @param group A Group. 125 * @return True if this GroupSet contained the Group 126 * before it was removed. 127 */ 128 public boolean remove(Group group) 129 { 130 boolean res = contains(group); 131 nameMap.remove(group.getName()); 132 idMap.remove(group.getIdAsObj()); 133 return res; 134 } 135 136 /** 137 * Checks whether this GroupSet contains a Group. 138 * 139 * @param group A Group. 140 * @return True if this GroupSet contains the Group, 141 * false otherwise. 142 */ 143 public boolean contains(Group group) 144 { 145 return nameMap.containsValue(group); 146 } 147 148 /** 149 * Returns a Group with the given name, if it is contained in 150 * this GroupSet. 151 * 152 * @param groupName Name of Group. 153 * @return Group if argument matched a Group in this 154 * GroupSet; null if no match. 155 */ 156 public Group getGroupByName(String groupName) 157 { 158 return (StringUtils.isNotEmpty(groupName)) 159 ? (Group) nameMap.get(groupName) : null; 160 } 161 162 /** 163 * Returns a Group with the given id, if it is contained in 164 * this GroupSet. 165 * 166 * @param groupId Id of the group 167 * @return Group if argument matched a Group in this 168 * GroupSet; null if no match. 169 */ 170 public Group getGroupById(int groupId) 171 { 172 return (groupId != 0) 173 ? (Group) idMap.get(new Integer(groupId)) : null; 174 } 175 176 /** 177 * Returns an Array of Groups in this GroupSet. 178 * 179 * @return An Array of Group objects. 180 */ 181 public Group[] getGroupsArray() 182 { 183 return getSet().toArray(new Group[0]); 184 } 185 186 /** 187 * Print out a GroupSet as a String 188 * 189 * @returns The Group Set as String 190 * 191 */ 192 @Override 193 public String toString() 194 { 195 StringBuffer sb = new StringBuffer(); 196 sb.append("GroupSet: "); 197 198 for(Iterator<Group> it = iterator(); it.hasNext();) 199 { 200 Group g = it.next(); 201 sb.append('['); 202 sb.append(g.getName()); 203 sb.append(" -> "); 204 sb.append(g.getIdAsObj()); 205 sb.append(']'); 206 if (it.hasNext()) 207 { 208 sb.append(", "); 209 } 210 } 211 212 return sb.toString(); 213 } 214 }