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 }