1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 package de.desy.acop.displayers.selector;
24
25 import java.awt.GridBagConstraints;
26 import java.awt.GridBagLayout;
27 import java.awt.Insets;
28 import java.awt.event.ActionEvent;
29 import java.awt.event.ActionListener;
30 import java.beans.Beans;
31 import java.beans.Customizer;
32 import java.beans.PropertyChangeEvent;
33 import java.beans.PropertyChangeListener;
34 import java.beans.PropertyVetoException;
35
36 import javax.swing.JButton;
37 import javax.swing.JPanel;
38
39 import com.cosylab.gui.components.util.RunnerHelper;
40 import com.cosylab.util.CommonException;
41
42 import de.desy.acop.displayers.tools.ConnectionParametersReceiver;
43 import de.desy.acop.displayers.tools.MultipleAcopDisplayer;
44 import de.desy.acop.transport.ConnectionParameters;
45
46
47
48
49
50
51
52
53
54
55
56
57 public class ConnectionCustomizer extends JPanel implements Customizer {
58
59 private static final long serialVersionUID = -4511139029213172995L;
60
61 private Object bean;
62
63 private JPanel commandPanel;
64 private SelectorGUI selectorGUI;
65
66 private JButton connectButton;
67 private boolean connectButtonVisible = true;
68
69 private ConnectionParameters connectionParameters;
70
71
72
73
74
75 public ConnectionCustomizer() {
76 super();
77 initialize();
78 }
79
80 private void initialize() {
81
82 this.setLayout(new GridBagLayout());
83 this.add(getCommandPanel(), new GridBagConstraints(0,0,1,1,1,1,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(11,11,11,11),0,0));
84 }
85
86 private JButton getConnectButton() {
87 if (connectButton == null) {
88 connectButton = new JButton("Connect");
89 connectButton.addActionListener(new ActionListener() {
90
91 public void actionPerformed(ActionEvent e) {
92 try {
93 if (bean instanceof ConnectionParametersReceiver) {
94 ((ConnectionParametersReceiver)bean).setConnectionParameters(getSelectorGUI().getConnectionParameters());
95 }
96 } catch (CommonException e1) {
97 e1.printStackTrace();
98 } catch (PropertyVetoException e1) {
99 e1.printStackTrace();
100 }
101 }
102
103 });
104 connectButton.setVisible(connectButtonVisible);
105 connectButton.setEnabled(false);
106 }
107 return connectButton;
108 }
109
110 private SelectorGUI getSelectorGUI() {
111 if (selectorGUI == null) {
112 selectorGUI = new SelectorGUI();
113 selectorGUI.addSelectorGUIListener(new SelectorGUIListener() {
114 public void selectionChanged(SelectorGUIEvent e) {
115 setButtonsEnabled(e.isSelectionComplete());
116 }
117 });
118 selectorGUI.addPropertyChangeListener(ConnectionParametersReceiver.CONNECTION_PARAMETERS_PROPERTY, new PropertyChangeListener() {
119 public void propertyChange(PropertyChangeEvent evt) {
120 if (!ConnectionParametersReceiver.CONNECTION_PARAMETERS_PROPERTY.equals(evt.getPropertyName())) return;
121 setConnectionParameters((ConnectionParameters) evt.getNewValue());
122 }
123 });
124 if (bean != null)
125 selectorGUI.setObject(bean);
126 }
127 return selectorGUI;
128 }
129
130 private JPanel getCommandPanel() {
131 if (commandPanel == null) {
132 commandPanel = new JPanel(new GridBagLayout());
133 commandPanel.add(getSelectorGUI(), new GridBagConstraints(0,0,1,1,1,1,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0,0,0,0),0,0));
134
135 if (!Beans.isDesignTime()) {
136 commandPanel.add(getConnectButton(), new GridBagConstraints(0,1,2,1,1,0,GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0,0,0,0),0,0));
137 }
138 }
139 return commandPanel;
140 }
141
142
143
144
145
146
147 public void setObject(Object bean) {
148 if (bean instanceof MultipleAcopDisplayer) {
149 this.bean = bean;
150 } else if (bean instanceof ConnectionParametersReceiver) {
151 this.bean = bean;
152 ((ConnectionParametersReceiver)this.bean).addPropertyChangeListener(ConnectionParametersReceiver.CONNECTION_PARAMETERS_PROPERTY,
153 new PropertyChangeListener(){
154 public void propertyChange(PropertyChangeEvent evt) {
155 setConnectionParameters(((ConnectionParametersReceiver)ConnectionCustomizer.this.bean).getConnectionParameters());
156 }
157 });
158 } else {
159 throw new IllegalArgumentException("Only ConnectionParametersReceiver and" +
160 " MultipleAcopDisplayer can use this Customizer.");
161 }
162
163 getSelectorGUI().setObject(bean);
164
165 }
166
167
168
169
170
171
172 public ConnectionParameters getConnectionParameters() {
173 return connectionParameters;
174 }
175
176
177
178
179
180
181 public void setConnectionParameters(ConnectionParameters parameters) {
182 if (parameters != null && parameters.equals(connectionParameters)) return;
183 ConnectionParameters old = connectionParameters;
184 connectionParameters = parameters;
185 if (Beans.isDesignTime() && bean != null && bean instanceof ConnectionParametersReceiver && SelectorUtilities.isConnectionParametersValid(connectionParameters)) {
186 try {
187 ((ConnectionParametersReceiver)bean).setConnectionParameters(parameters);
188 } catch (CommonException e) {
189 e.printStackTrace();
190 } catch (PropertyVetoException e) {
191 e.printStackTrace();
192 }
193 }
194 getSelectorGUI().setConnectionParameters(parameters);
195 if (SelectorUtilities.isConnectionParametersValid(connectionParameters))
196 setButtonsEnabled(true);
197 firePropertyChange(ConnectionParametersReceiver.CONNECTION_PARAMETERS_PROPERTY, old, parameters);
198 }
199
200
201
202
203
204 public boolean isConnectButtonVisible() {
205 return connectButtonVisible;
206 }
207
208
209
210
211
212
213
214 public void setConnectButtonVisible(boolean connectButtonVisible) {
215 this.connectButtonVisible = connectButtonVisible;
216 if (connectButton!=null) {
217 connectButton.setVisible(connectButtonVisible);
218 }
219 }
220
221 private void setButtonsEnabled(boolean enabled) {
222 getConnectButton().setEnabled(enabled);
223 }
224
225
226
227
228
229
230
231 public void setOnlyConnectionParametersMode(boolean onlyCP) {
232 getSelectorGUI().setOnlyConnectionParametersMode(onlyCP);
233 }
234
235
236
237
238
239 public boolean getOnlyConnectionParametersMode() {
240 return getSelectorGUI().getOnlyConnectionParametersMode();
241 }
242
243 public static void main(String[] args) {
244 try {
245
246 ConnectionCustomizer c= new ConnectionCustomizer();
247 RunnerHelper.runComponent(c,300,300);
248
249
250
251
252
253
254
255
256
257 } catch (Exception e) {
258 e.printStackTrace();
259 }
260 }
261
262
263
264 }
265