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 }