Lines 56-69
Link Here
|
56 |
* @return An array of {@link Groupable}s. |
56 |
* @return An array of {@link Groupable}s. |
57 |
*/ |
57 |
*/ |
58 |
public Groupable[] getMembers() { |
58 |
public Groupable[] getMembers() { |
|
|
59 |
Set members = members(); |
59 |
return (Groupable[]) members.toArray(new Groupable[members.size()]); |
60 |
return (Groupable[]) members.toArray(new Groupable[members.size()]); |
60 |
} |
61 |
} |
|
|
62 |
|
63 |
private boolean initializing = false; |
64 |
|
65 |
protected Set members() { |
66 |
// First we must make sure that the user and IP range managers |
67 |
// are initialized because otherwise the group won't contain their members |
68 |
if (!initializing) { |
69 |
// avoid race condition |
70 |
initializing = true; |
71 |
try { |
72 |
getItemManager().getAccreditableManager().getUserManager(); |
73 |
getItemManager().getAccreditableManager().getIPRangeManager(); |
74 |
} catch (AccessControlException e) { |
75 |
throw new RuntimeException(e); |
76 |
} |
77 |
initializing = false; |
78 |
} |
79 |
return this.members; |
80 |
} |
61 |
|
81 |
|
62 |
/** |
82 |
/** |
63 |
* Adds a member to this group. |
83 |
* Adds a member to this group. |
64 |
* @param member The member to add. |
84 |
* @param member The member to add. |
65 |
*/ |
85 |
*/ |
66 |
public void add(Groupable member) { |
86 |
public void add(Groupable member) { |
|
|
87 |
Set members = members(); |
67 |
assert (member != null) && !members.contains(member); |
88 |
assert (member != null) && !members.contains(member); |
68 |
members.add(member); |
89 |
members.add(member); |
69 |
member.addedToGroup(this); |
90 |
member.addedToGroup(this); |
Lines 74-79
Link Here
|
74 |
* @param member The member to remove. |
95 |
* @param member The member to remove. |
75 |
*/ |
96 |
*/ |
76 |
public void remove(Groupable member) { |
97 |
public void remove(Groupable member) { |
|
|
98 |
Set members = members(); |
77 |
assert (member != null) && members.contains(member); |
99 |
assert (member != null) && members.contains(member); |
78 |
members.remove(member); |
100 |
members.remove(member); |
79 |
member.removedFromGroup(this); |
101 |
member.removedFromGroup(this); |
Lines 95-101
Link Here
|
95 |
* @return A boolean value. |
117 |
* @return A boolean value. |
96 |
*/ |
118 |
*/ |
97 |
public boolean contains(Groupable member) { |
119 |
public boolean contains(Groupable member) { |
98 |
boolean contains = members.contains(member); |
120 |
boolean contains = members().contains(member); |
99 |
|
121 |
|
100 |
if (!contains && member instanceof User && getRule() != null) { |
122 |
if (!contains && member instanceof User && getRule() != null) { |
101 |
User user = (User) member; |
123 |
User user = (User) member; |
Lines 132-150
Link Here
|
132 |
private String rule; |
154 |
private String rule; |
133 |
|
155 |
|
134 |
public void setRule(String rule) throws AccessControlException { |
156 |
public void setRule(String rule) throws AccessControlException { |
135 |
AttributeRuleEvaluator evaluator = getAttributeRuleEvaluator(); |
157 |
if (rule != null) { |
136 |
ValidationResult result = evaluator.validate(rule); |
158 |
AttributeRuleEvaluator evaluator = getAttributeRuleEvaluator(); |
137 |
if (!result.succeeded()) { |
159 |
ValidationResult result = evaluator.validate(rule); |
138 |
StringBuffer msg = new StringBuffer(); |
160 |
if (!result.succeeded()) { |
139 |
Message[] messages = result.getMessages(); |
161 |
StringBuffer msg = new StringBuffer(); |
140 |
for (int i = 0; i < messages.length; i++) { |
162 |
Message[] messages = result.getMessages(); |
141 |
if (i > 0) { |
163 |
for (int i = 0; i < messages.length; i++) { |
142 |
msg.append("; "); |
164 |
if (i > 0) { |
|
|
165 |
msg.append("; "); |
166 |
} |
167 |
msg.append(messages[i].getText()); |
143 |
} |
168 |
} |
144 |
msg.append(messages[i].getText()); |
169 |
throw new AccessControlException("The rule for group [" + getId() + "] is not valid: " |
|
|
170 |
+ msg.toString()); |
145 |
} |
171 |
} |
146 |
throw new AccessControlException("The rule for group [" + getId() + "] is not valid: " |
|
|
147 |
+ msg.toString()); |
148 |
} |
172 |
} |
149 |
this.rule = rule; |
173 |
this.rule = rule; |
150 |
} |
174 |
} |