You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lenya.apache.org by an...@apache.org on 2007/12/06 17:26:14 UTC

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

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;
     }



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@lenya.apache.org
For additional commands, e-mail: commits-help@lenya.apache.org