001    /*
002     * Copyright 2002-2004 the original author or authors.
003     * 
004     * Licensed under the Apache License, Version 2.0 (the "License"); you may not
005     * use this file except in compliance with the License. You may obtain a copy of
006     * the License at
007     * 
008     * http://www.apache.org/licenses/LICENSE-2.0
009     * 
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
012     * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
013     * License for the specific language governing permissions and limitations under
014     * the License.
015     */
016    package org.springframework.richclient.command;
017    
018    import java.util.ArrayList;
019    import java.util.Collections;
020    import java.util.Iterator;
021    import java.util.List;
022    import java.util.Map;
023    import java.util.WeakHashMap;
024    
025    import org.apache.commons.logging.Log;
026    import org.apache.commons.logging.LogFactory;
027    import org.springframework.richclient.command.config.CommandButtonConfigurer;
028    
029    public class GroupMemberList {
030        private static final Log logger = LogFactory.getLog(GroupMemberList.class);
031    
032        private List members = new ArrayList(9);
033    
034        private Map builders = new WeakHashMap(6);
035    
036        private ExpansionPointGroupMember expansionPoint;
037    
038        public GroupMemberList() {
039    
040        }
041    
042        public void add(GroupMember member) {
043            if (members.add(member)) {
044                if (logger.isDebugEnabled()) {
045                    logger.debug("Member '" + member + "' added to memberList");
046                }
047                member.onAdded();
048            }
049        }
050    
051        public void append(GroupMember member) {
052            getExpansionPoint().add(member);
053        }
054    
055        public ExpansionPointGroupMember getExpansionPoint() {
056            if (expansionPoint == null) {
057                expansionPoint = new ExpansionPointGroupMember();
058                add(expansionPoint);
059            }
060            return expansionPoint;
061        }
062    
063        public int size() {
064            return members.size();
065        }
066    
067        public Iterator iterator() {
068            return Collections.unmodifiableList(members).iterator();
069        }
070    
071        public void setContainersVisible(boolean visible) {
072            Iterator it = builders.values().iterator();
073            while (it.hasNext()) {
074                GroupMemberContainerManager gcm = (GroupMemberContainerManager)it.next();
075                gcm.setVisible(visible);
076            }
077        }
078    
079        protected void bindMembers(Object owner, GroupContainerPopulator container, Object factory,
080                CommandButtonConfigurer configurer) {
081            GroupMemberContainerManager builder = new GroupMemberContainerManager(container, factory, configurer);
082            builder.rebuildControlsFor(members);
083            builders.put(owner, builder);
084        }
085    
086        protected void rebuildControls() {
087            Iterator iter = builders.values().iterator();
088            while (iter.hasNext()) {
089                GroupMemberContainerManager builder = (GroupMemberContainerManager)iter.next();
090                if (builder != null) {
091                    builder.rebuildControlsFor(members);
092                }
093            }
094        }
095    
096        public boolean contains(AbstractCommand command) {
097            for (int i = 0; i < members.size(); i++) {
098                GroupMember member = (GroupMember)members.get(i);
099                if (member.managesCommand(command.getId())) {
100                    return true;
101                }
102            }
103            return false;
104        }
105    
106    }