View | Details | Raw Unified | Return to bug 44035
Collapse All | Expand All

(-)src/java/org/apache/lenya/ac/impl/AbstractGroup.java (-12 / +36 lines)
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
    }

Return to bug 44035