svn commit: r601779 - /lenya/branches/branch_1_2_x_shibboleth/src/java/org/apache/lenya/ac/impl/AbstractGroup.java

[email protected]
Newsgroups gmane.comp.cms.lenya.cvs
Message-ID <[email protected]>
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.