View Javadoc

1   package org.glassbox.gui;
2   
3   import org.glassbox.SwingThread;
4   
5   import java.util.HashMap;
6   import java.util.Iterator;
7   
8   /***
9      Abstract implementation of group.
10   */
11  public abstract class AbstractGroup implements Group {
12      protected HashMap _members;
13      protected HashMap _properties;
14  
15      public AbstractGroup() {
16  	_members = new HashMap();
17  	_properties = new HashMap();
18      }
19  
20      public void addMember(Member member) {
21  	Member oldmember = (Member)_members.put(member.getIdentifier(), member);
22  	member.setGroup(this);
23  	// FIXME! The derivations of this class do not remove overwritten visible members from their view.
24  	// "add" is wrong in this context, must be "put" or something like that.
25  	if (oldmember != null) oldmember.setGroup(null);
26      }
27      
28      public void removeMember(String identifier) {
29  	Member member = (Member)_members.remove(identifier);
30  	if (member!=null) member.setGroup(null);
31      }
32  
33      public void setProperty(String name, Object value) {
34  	Object oldvalue = _properties.get(name);
35  	_properties.put(name, value);
36  	firePropertyChanged(name, oldvalue, value);
37      }
38  
39      public Object getProperty(String name) {
40  	return _properties.get(name);
41      }
42  
43      public Member getMember(String name) {
44  	return (Member)_members.get(name);
45      }
46  
47      /***
48         Fire a property change.
49         The event is only fired, if the old value is not equal to the new value.
50       */
51      protected void firePropertyChanged(final String name, final Object oldvalue, final Object newvalue) {
52  	if (!((oldvalue == null && newvalue == null) ||
53  	      (oldvalue != null && oldvalue.equals(newvalue)))) {
54  	    SwingThread.invokeAndWaitSilently(new Runnable() {
55  		    public void run() {
56  			Iterator members = _members.values().iterator(); while(members.hasNext()) {
57  			    ((Member)members.next()).groupPropertyChanged(name, oldvalue, newvalue);
58  			}
59  		    }
60  		});	
61  	}
62      }
63  }