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 abstract public boolean dependsOn(ModelItem modelItem);
72
73 public String getTitle()
74 {
75 return modelItem.getName();
76 }
77
78 public String getDescription()
79 {
80 return modelItem.getDescription();
81 }
82
83 protected JButton createActionButton(Action action, boolean enabled)
84 {
85 JButton button = UISupport.createToolbarButton(action, enabled);
86 action.putValue(Action.NAME, null);
87 return button;
88 }
89
90 public void addPropertyChangeListener(String propertyName,
91 PropertyChangeListener listener)
92 {
93 propertyChangeSupport.addPropertyChangeListener( propertyName, listener );
94 }
95
96 public void addPropertyChangeListener(PropertyChangeListener listener)
97 {
98 propertyChangeSupport.addPropertyChangeListener( listener );
99 }
100
101 public void removePropertyChangeListener(PropertyChangeListener listener)
102 {
103 propertyChangeSupport.removePropertyChangeListener( listener );
104 }
105
106 public void removePropertyChangeListener(String propertyName,
107 PropertyChangeListener listener)
108 {
109 propertyChangeSupport.removePropertyChangeListener( propertyName, listener );
110 }
111
112 public void notifyPropertyChange( String propertyName, Object oldValue, Object newValue )
113 {
114 propertyChangeSupport.firePropertyChange( propertyName, oldValue, newValue );
115 }
116
117 private class InternalPropertyChangeListener implements PropertyChangeListener
118 {
119 public void propertyChange(PropertyChangeEvent evt)
120 {
121 if( evt.getPropertyName().equals( ModelItem.NAME_PROPERTY ))
122 notifyPropertyChange( DesktopPanel.TITLE_PROPERTY, null, getTitle() );
123
124 if( evt.getPropertyName().equals( ModelItem.ICON_PROPERTY ))
125 notifyPropertyChange( DesktopPanel.ICON_PROPERTY, null, getIcon() );
126 }
127 }
128 }