1
2
3
4
5
6
7
8
9
10
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 }