View Javadoc

1   /*
2    *  soapUI, copyright (C) 2006 eviware.com 
3    *
4    *  soapUI is free software; you can redistribute it and/or modify it under the 
5    *  terms of the GNU Lesser General Public License as published by the Free Software Foundation; 
6    *  either version 2.1 of the License, or (at your option) any later version.
7    *
8    *  soapUI is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without 
9    *  even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
10   *  See the GNU Lesser General Public License for more details at gnu.org.
11   */
12  
13  package com.eviware.soapui.ui.support;
14  
15  import java.awt.BorderLayout;
16  import java.beans.PropertyChangeEvent;
17  import java.beans.PropertyChangeListener;
18  import java.beans.PropertyChangeSupport;
19  
20  import javax.swing.Action;
21  import javax.swing.Icon;
22  import javax.swing.JButton;
23  import javax.swing.JComponent;
24  import javax.swing.JPanel;
25  
26  import com.eviware.soapui.model.ModelItem;
27  import com.eviware.soapui.support.UISupport;
28  import com.eviware.soapui.ui.desktop.DesktopPanel;
29  
30  /***
31   * Base class for DesktopPanels..
32   */
33  
34  public abstract class ModelItemDesktopPanel<T extends ModelItem> extends JPanel implements DesktopPanel
35  {
36  	private PropertyChangeSupport propertyChangeSupport;
37  	private final T modelItem;
38  	private InternalPropertyChangeListener propertyChangeListener;
39  
40  	public ModelItemDesktopPanel( T modelItem )
41  	{
42  		super( new BorderLayout() );
43  		this.modelItem = modelItem;
44  		propertyChangeSupport = new PropertyChangeSupport( this );
45  		
46  		propertyChangeListener = new InternalPropertyChangeListener();
47  		((ModelItem)modelItem).addPropertyChangeListener( propertyChangeListener );
48  	}
49  
50  	protected boolean release()
51  	{
52  		modelItem.removePropertyChangeListener( propertyChangeListener );
53  		return true;
54  	}
55  	
56  	public JComponent getComponent()
57  	{
58  		return this;
59  	}
60  	
61  	final public T getModelItem()
62  	{
63  		return modelItem;
64  	}
65  
66  	public Icon getIcon()
67  	{
68  		return modelItem.getIcon();
69  	}
70  
71  	public boolean dependsOn(ModelItem modelItem)
72  	{
73  		return false;
74  	}
75  	
76  	public String getTitle()
77  	{
78  		return modelItem.getName();
79  	}
80  	
81  	public String getDescription()
82  	{
83  		return modelItem.getDescription();
84  	}
85  
86  	protected JButton createActionButton(Action action, boolean enabled)
87  	{
88  		JButton button = UISupport.createToolbarButton(action, enabled);
89  		action.putValue(Action.NAME, null);
90  		return button;
91  	}
92  
93  	public void addPropertyChangeListener(String propertyName,
94  			PropertyChangeListener listener)
95  	{
96  		propertyChangeSupport.addPropertyChangeListener( propertyName, listener );
97  	}
98  
99  	public void addPropertyChangeListener(PropertyChangeListener listener)
100 	{
101 		propertyChangeSupport.addPropertyChangeListener( listener );
102 	}
103 
104 	public void removePropertyChangeListener(PropertyChangeListener listener)
105 	{
106 		propertyChangeSupport.removePropertyChangeListener( listener );
107 	}
108 
109 	public void removePropertyChangeListener(String propertyName,
110 			PropertyChangeListener listener)
111 	{
112 		propertyChangeSupport.removePropertyChangeListener( propertyName, listener );
113 	}
114 	
115 	public void notifyPropertyChange( String propertyName, Object oldValue, Object newValue )
116 	{
117 		propertyChangeSupport.firePropertyChange( propertyName, oldValue, newValue );
118 	}
119 	
120 	private class InternalPropertyChangeListener implements PropertyChangeListener
121 	{
122 		public void propertyChange(PropertyChangeEvent evt)
123 		{
124 			if( evt.getPropertyName().equals( ModelItem.NAME_PROPERTY ))
125 				notifyPropertyChange( DesktopPanel.TITLE_PROPERTY, null, getTitle() );
126 			
127 			if( evt.getPropertyName().equals( ModelItem.ICON_PROPERTY ))
128 				notifyPropertyChange( DesktopPanel.ICON_PROPERTY, null, getIcon() );
129 		}
130 	}
131 }