View Javadoc

1   /*
2    * Copyright (c) 2003-2008 by Cosylab d. d.
3    *
4    * This file is part of Java-Common.
5    *
6    * Java-Common is free software: you can redistribute it and/or modify
7    * it under the terms of the GNU General Public License as published by
8    * the Free Software Foundation, either version 3 of the License, or
9    * (at your option) any later version.
10   *
11   * Java-Common is distributed in the hope that it will be useful,
12   * but WITHOUT ANY WARRANTY; without even the implied warranty of
13   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14   * GNU General Public License for more details.
15   *
16   * You should have received a copy of the GNU General Public License
17   * along with Java-Common.  If not, see <http://www.gnu.org/licenses/>.
18   */
19  
20  package com.cosylab.util;
21  
22  import java.beans.PropertyChangeEvent;
23  import java.beans.PropertyChangeListener;
24  import java.beans.PropertyChangeSupport;
25  import java.util.HashMap;
26  
27  /**
28   * A support class that acts as a <code>java.beans.PropertyChangeSupport</code> with the ability
29   * to be <b>extended</b> by classes that need PropertyChange events and an internal 
30   * map-like store for property values which automatically fires <code>PropertyChangeEvent</code>s
31   * 
32   * @author Miha Kadunc (<a href="mailto:miha.kadunc@cosylab.com">miha.kadunc@cosylab.com</a>
33   */
34  public class PropertyChangeHelper {
35  	private PropertyChangeSupport pcSupport;
36  	private HashMap clientProperties;
37  	
38  	public PropertyChangeHelper() {
39  		super();
40  		pcSupport=new PropertyChangeSupport(this);
41  	}
42  	
43  	public PropertyChangeHelper(Object source) {
44  		super();
45  		pcSupport=new PropertyChangeSupport(source);
46  	}
47  	
48  	public void setClientProperty(String propertyName, Object propertyValue) {
49  		if (clientProperties==null) {
50  			clientProperties=new HashMap();
51  		}
52  		Object old=clientProperties.get(propertyName);
53  		clientProperties.put(propertyName,propertyValue);
54  		firePropertyChange(propertyName,old,propertyValue);
55  	}
56  	
57  	public Object getClientProperty(String propertyName) {
58  		if (clientProperties==null) {
59  			return null;
60  		} else {
61  			return clientProperties.get(propertyName);
62  		}
63  	}
64  	
65  	public void addPropertyChangeListener(PropertyChangeListener listener) {
66  		pcSupport.addPropertyChangeListener(listener);
67  	}
68  	public void addPropertyChangeListener(String propertyName,
69  											PropertyChangeListener listener) {
70  		pcSupport.addPropertyChangeListener(propertyName, listener);
71  	}
72  	public void firePropertyChange(PropertyChangeEvent evt) {
73  		pcSupport.firePropertyChange(evt);
74  	}
75  	public void firePropertyChange(String propertyName, boolean oldValue,
76  									boolean newValue) {
77  		pcSupport.firePropertyChange(propertyName, oldValue, newValue);
78  	}
79  	public void firePropertyChange(String propertyName, int oldValue,
80  									int newValue) {
81  		pcSupport.firePropertyChange(propertyName, oldValue, newValue);
82  	}
83  	public void firePropertyChange(String propertyName, Object oldValue,
84  									Object newValue) {
85  		pcSupport.firePropertyChange(propertyName, oldValue, newValue);
86  	}
87  	public PropertyChangeListener[] getPropertyChangeListeners() {
88  		return pcSupport.getPropertyChangeListeners();
89  	}
90  	public PropertyChangeListener[] getPropertyChangeListeners(
91  																String propertyName) {
92  		return pcSupport.getPropertyChangeListeners(propertyName);
93  	}
94  	public int hashCode() {
95  		return pcSupport.hashCode();
96  	}
97  	public boolean hasListeners(String propertyName) {
98  		return pcSupport.hasListeners(propertyName);
99  	}
100 	public void removePropertyChangeListener(PropertyChangeListener listener) {
101 		pcSupport.removePropertyChangeListener(listener);
102 	}
103 	public void removePropertyChangeListener(String propertyName,
104 												PropertyChangeListener listener) {
105 		pcSupport.removePropertyChangeListener(propertyName, listener);
106 	}
107 	public String toString() {
108 		return pcSupport.toString();
109 	}
110 }