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 }