Author: andreas
Date: Thu Dec 6 08:26:13 2007
New Revision: 601779
URL: http://svn.apache.org/viewvc?rev=601779&view=rev
Log:
Initialize user and IP range managers when Group.getMembers() is called. This fixes bug 44035.
Modified:
lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/AbstractGroup.java
Modified: lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/AbstractGroup.java
URL: http://svn.apache.org/viewvc/lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/AbstractGroup.java?rev=601779&r1=601778&r2=601779&view=diff
==============================================================================
--- lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/AbstractGroup.java (original)
+++ lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/AbstractGroup.java Thu Dec 6 08:26:13 2007
@@ -56,14 +56,35 @@
* @return An array of {@link Groupable}s.
*/
public Groupable[] getMembers() {
+ Set members = members();
return (Groupable[]) members.toArray(new Groupable[members.size()]);
}
+
+ private boolean initializing = false;
+
+ protected Set members() {
+ // First we must make sure that the user and IP range managers
+ // are initialized because otherwise the group won't contain their members
+ if (!initializing) {
+ // avoid race condition
+ initializing = true;
+ try {
+ getItemManager().getAccreditableManager().getUserManager();
+ getItemManager().getAccreditableManager().getIPRangeManager();
+ } catch (AccessControlException e) {
+ throw new RuntimeException(e);
+ }
+ initializing = false;
+ }
+ return this.members;
+ }
/**
* Adds a member to this group.
* @param member The member to add.
*/
public void add(Groupable member) {
+ Set members = members();
assert (member != null) && !members.contains(member);
members.add(member);
member.addedToGroup(this);
@@ -74,6 +95,7 @@
* @param member The member to remove.
*/
public void remove(Groupable member) {
+ Set members = members();
assert (member != null) && members.contains(member);
members.remove(member);
member.removedFromGroup(this);
@@ -95,7 +117,7 @@
* @return A boolean value.
*/
public boolean contains(Groupable member) {
- boolean contains = members.contains(member);
+ boolean contains = members().contains(member);
if (!contains && member instanceof User && getRule() != null) {
User user = (User) member;
@@ -132,19 +154,21 @@
private String rule;
public void setRule(String rule) throws AccessControlException {
- AttributeRuleEvaluator evaluator = getAttributeRuleEvaluator();
- ValidationResult result = evaluator.validate(rule);
- if (!result.succeeded()) {
- StringBuffer msg = new StringBuffer();
- Message[] messages = result.getMessages();
- for (int i = 0; i < messages.length; i++) {
- if (i > 0) {
- msg.append("; ");
+ if (rule != null) {
+ AttributeRuleEvaluator evaluator = getAttributeRuleEvaluator();
+ ValidationResult result = evaluator.validate(rule);
+ if (!result.succeeded()) {
+ StringBuffer msg = new StringBuffer();
+ Message[] messages = result.getMessages();
+ for (int i = 0; i < messages.length; i++) {
+ if (i > 0) {
+ msg.append("; ");
+ }
+ msg.append(messages[i].getText());
}
- msg.append(messages[i].getText());
+ throw new AccessControlException("The rule for group [" + getId() + "] is not valid: "
+ + msg.toString());
}
- throw new AccessControlException("The rule for group [" + getId() + "] is not valid: "
- + msg.toString());
}
this.rule = rule;
}
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.