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.Component;
26 import java.awt.Dimension;
27 import java.awt.GridBagConstraints;
28 import java.awt.GridBagLayout;
29 import java.awt.Insets;
30
31 import java.awt.event.ActionEvent;
32 import java.awt.event.ActionListener;
33 import java.awt.event.ItemEvent;
34 import java.awt.event.ItemListener;
35 import java.beans.PropertyChangeEvent;
36 import java.beans.PropertyChangeListener;
37 import java.util.concurrent.LinkedBlockingQueue;
38 import java.util.concurrent.RejectedExecutionHandler;
39 import java.util.concurrent.ThreadPoolExecutor;
40 import java.util.concurrent.TimeUnit;
41
42 import javax.swing.DefaultListCellRenderer;
43 import javax.swing.JCheckBox;
44 import javax.swing.JComboBox;
45 import javax.swing.JLabel;
46 import javax.swing.JList;
47 import javax.swing.JPanel;
48 import javax.swing.SwingUtilities;
49
50 import com.cosylab.gui.components.util.RunnerHelper;
51
52 import de.desy.acop.displayers.chart.HistoryParameters;
53 import de.desy.acop.displayers.tools.ConnectionParametersReceiver;
54
55
56
57
58
59
60
61
62
63 @Deprecated
64 public class TrendHistorySelectorGUI extends JPanel {
65
66 private class ComboRenderer extends DefaultListCellRenderer {
67
68 private static final long serialVersionUID = 1L;
69
70 @Override
71 public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
72
73 Component c = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
74 if (value != null && c instanceof JLabel) {
75 ((JLabel)c).setToolTipText(String.valueOf(value));
76 }
77 return c;
78 }
79 }
80
81 private class IndexModel extends AcopComboBoxModel<Integer> {
82
83 private static final long serialVersionUID = 1L;
84 public IndexModel() {
85 super(Integer.class);
86 }
87
88 public void setMaxIndex(int maxIndex) {
89 removeAllElements();
90 Integer[] values = new Integer[maxIndex+1];
91 for (int i = 0; i <= maxIndex; i++) {
92 values[i] = i;
93 }
94 setElements(values);
95 if (values.length > 0) {
96 setSelectedItem(values[0]);
97 }
98 }
99 }
100
101
102 private static final long serialVersionUID = 1647591422586736408L;
103
104 private JPanel commandPanel;
105 private JComboBox deviceContextCombo;
106 private JComboBox subSystemCombo;
107 private JComboBox deviceServerCombo;
108 private JComboBox deviceNameCombo;
109 private JComboBox propertyNameCombo;
110 private AcopComboBoxModel<String> deviceContextModel;
111 private AcopComboBoxModel<String> subSystemModel;
112 private AcopComboBoxModel<String> deviceServerModel;
113 private AcopComboBoxModel<String> deviceNameModel;
114 private AcopComboBoxModel<String> propertyNameModel;
115 private JLabel deviceContextLabel;
116 private JLabel subSystemLabel;
117 private JLabel deviceServerLabel;
118 private JLabel deviceNameLabel;
119 private JLabel propertyNameLabel;
120 private JLabel indexLabel;
121 private JComboBox indexCombo;
122 private JCheckBox enableHistoryBox;
123 private IndexModel indexModel;
124
125 private HistoryParameters historyParameters;
126 private volatile Selector selector;
127
128 private PropertyChangeListener selectorPropertyListener;
129 private QueryListener selectorQueryListener;
130 private ExceptionListener exceptionListener;
131 private boolean settingFromSelector = false;
132 private Dimension comboDim = new Dimension(170,21);
133
134 private boolean historyEnabled = false;
135
136
137
138
139
140 public TrendHistorySelectorGUI() {
141 super();
142 initialize();
143 }
144
145 private void initialize() {
146 deviceContextModel= new AcopComboBoxModel<String>(String.class);
147 subSystemModel = new AcopComboBoxModel<String>(String.class);
148 deviceServerModel= new AcopComboBoxModel<String>(String.class);
149 deviceNameModel= new AcopComboBoxModel<String>(String.class);
150 propertyNameModel= new AcopComboBoxModel<String>(String.class);
151 setSelector(new Selector());
152
153 this.setLayout(new GridBagLayout());
154 this.add(getCommandPanel(), new GridBagConstraints(0,0,1,1,1,1,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0,0,0,0),0,0));
155 }
156
157 private void applySettings() {
158
159 try {
160 int idx = 0;
161 HistoryParameters old = historyParameters;
162 historyParameters = new HistoryParameters(getSelector().getSelectedContext(), getSelector().getSelectedServer(), getSelector().getSelectedDevice(), getSelector().getSelectedProperty(), idx);
163 firePropertyChange(ConnectionParametersReceiver.CONNECTION_PARAMETERS_PROPERTY,old,getHistoryParameters());
164 } catch (Exception e) {
165 e.printStackTrace();
166 }
167 }
168
169 private JPanel getCommandPanel() {
170 if (commandPanel == null) {
171 commandPanel = new JPanel(new GridBagLayout());
172
173 commandPanel.add(getEnableHistoryBox(), new GridBagConstraints(0,0,2,1,1,1,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0,1,1,1), 0,0));
174 deviceContextLabel = new JLabel("Device context");
175 deviceContextLabel.setPreferredSize(new Dimension(120,21));
176 deviceContextLabel.setMinimumSize(new Dimension(120,21));
177 deviceContextLabel.setMaximumSize(new Dimension(120,21));
178 commandPanel.add(deviceContextLabel, new GridBagConstraints(0,1,1,1,1,1,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0,1,1,1), 0,0));
179 commandPanel.add(getDeviceContextCombo(), new GridBagConstraints(1,1,2,1,1,1,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0,1,1,1), 0,0));
180
181 subSystemLabel = new JLabel("Device subsystem");
182 subSystemLabel.setPreferredSize(new Dimension(120,21));
183 subSystemLabel.setMinimumSize(new Dimension(120,21));
184 subSystemLabel.setMaximumSize(new Dimension(120,21));
185 commandPanel.add(subSystemLabel, new GridBagConstraints(0,2,1,1,1,1,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0,1,1,1), 0,0));
186 commandPanel.add(getSubSystemCombo(), new GridBagConstraints(1,2,2,1,1,1,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0,1,1,1), 0,0));
187
188 deviceServerLabel = new JLabel("Device server");
189 deviceServerLabel.setPreferredSize(new Dimension(120,21));
190 deviceServerLabel.setMinimumSize(new Dimension(120,21));
191 deviceServerLabel.setMaximumSize(new Dimension(120,21));
192 commandPanel.add(deviceServerLabel, new GridBagConstraints(0,3,1,1,1,1,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0,1,1,1), 0,0));
193 commandPanel.add(getDeviceServerCombo(), new GridBagConstraints(1,3,2,1,1,1,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0,1,1,1), 0,0));
194
195 deviceNameLabel = new JLabel("Device name");
196 deviceNameLabel.setPreferredSize(new Dimension(120,21));
197 deviceNameLabel.setMinimumSize(new Dimension(120,21));
198 deviceNameLabel.setMaximumSize(new Dimension(120,21));
199 commandPanel.add(deviceNameLabel, new GridBagConstraints(0,4,1,1,1,1,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0,1,1,1), 0,0));
200 commandPanel.add(getDeviceNameCombo(), new GridBagConstraints(1,4,2,1,1,1,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0,1,1,1), 0,0));
201
202 propertyNameLabel = new JLabel("Property name");
203 propertyNameLabel.setPreferredSize(new Dimension(120,21));
204 propertyNameLabel.setMinimumSize(new Dimension(120,21));
205 propertyNameLabel.setMaximumSize(new Dimension(120,21));
206 commandPanel.add(propertyNameLabel, new GridBagConstraints(0,5,1,1,1,1,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0,1,1,1), 0,0));
207 commandPanel.add(getPropertyNameCombo(), new GridBagConstraints(1,5,2,1,1,1,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0,1,1,1), 0,0));
208
209 indexLabel = new JLabel("Index");
210 indexLabel.setPreferredSize(new Dimension(120,21));
211 indexLabel.setMinimumSize(new Dimension(120,21));
212 indexLabel.setMaximumSize(new Dimension(120,21));
213 commandPanel.add(indexLabel, new GridBagConstraints(0,6,1,1,1,1,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0,1,1,1), 0,0));
214 commandPanel.add(getIndexCombo(), new GridBagConstraints(1,6,2,1,1,1,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0,1,1,1), 0,0));
215
216 setCombosEnabled(true);
217 }
218 return commandPanel;
219 }
220
221 private JCheckBox getEnableHistoryBox() {
222 if (enableHistoryBox == null) {
223 enableHistoryBox = new JCheckBox("History Enabled");
224 enableHistoryBox.addItemListener(new ItemListener() {
225 public void itemStateChanged(ItemEvent e) {
226 setHistoryEnabled(enableHistoryBox.isSelected());
227 }
228 });
229 enableHistoryBox.setSelected(true);
230 }
231
232 return enableHistoryBox;
233 }
234
235
236
237
238
239
240 public boolean isHistoryEnabled() {
241 return historyEnabled;
242 }
243
244
245
246
247
248
249 public void setHistoryEnabled(boolean historyEnabled) {
250 this.historyEnabled = historyEnabled;
251 getEnableHistoryBox().setSelected(historyEnabled);
252 setCombosEnabled(combosEnabled);
253 }
254
255 private JComboBox getIndexCombo() {
256 if (indexCombo == null) {
257 indexCombo = new JComboBox();
258 indexCombo.setModel(getIndexModel());
259 indexCombo.setPreferredSize(new Dimension(120,21));
260 indexCombo.setMinimumSize(new Dimension(120,21));
261 indexCombo.setMaximumSize(new Dimension(120,21));
262 }
263
264 return indexCombo;
265 }
266
267 private IndexModel getIndexModel() {
268 if (indexModel == null) {
269 indexModel = new IndexModel();
270 indexModel.setMaxIndex(0);
271 }
272
273 return indexModel;
274 }
275
276 private JComboBox getSubSystemCombo() {
277 if (subSystemCombo == null) {
278 subSystemCombo = new JComboBox();
279
280
281
282
283 subSystemCombo.setModel(subSystemModel);
284 subSystemCombo.setPreferredSize(comboDim);
285 subSystemCombo.setMinimumSize(comboDim);
286 subSystemCombo.setMaximumSize(comboDim);
287 subSystemCombo.setRenderer(new ComboRenderer());
288 subSystemCombo.addActionListener(new ActionListener() {
289 public void actionPerformed(ActionEvent e) {
290 if (settingFromSelector) return;
291 getExecutorService().execute(new Runnable() {
292 public void run() {
293 getSelector().setSelectedSubSystem(subSystemModel.getSelectedItem());
294 }
295 });
296 }
297 });
298 }
299 return subSystemCombo;
300 }
301
302 private JComboBox getDeviceContextCombo() {
303 if (deviceContextCombo == null) {
304 deviceContextCombo = new JComboBox();
305 deviceContextCombo.setModel(deviceContextModel);
306 deviceContextCombo.setPreferredSize(comboDim);
307 deviceContextCombo.setMinimumSize(comboDim);
308 deviceContextCombo.setMaximumSize(comboDim);
309 deviceContextCombo.setRenderer(new ComboRenderer());
310 deviceContextCombo.addActionListener(new ActionListener() {
311 public void actionPerformed(ActionEvent e) {
312 if (settingFromSelector) return;
313 getExecutorService().execute(new Runnable() {
314 public void run() {
315 getSelector().setSelectedContext(deviceContextModel.getSelectedItem());
316 }
317 });
318
319 }
320 });
321 }
322 return deviceContextCombo;
323 }
324
325 private JComboBox getDeviceServerCombo() {
326 if (deviceServerCombo == null) {
327 deviceServerCombo = new JComboBox();
328 deviceServerCombo.setModel(deviceServerModel);
329 deviceServerCombo.setPreferredSize(comboDim);
330 deviceServerCombo.setMinimumSize(comboDim);
331 deviceServerCombo.setMaximumSize(comboDim);
332 deviceServerCombo.setRenderer(new ComboRenderer());
333 deviceServerCombo.addActionListener(new ActionListener() {
334 public void actionPerformed(ActionEvent e) {
335 if (settingFromSelector) return;
336 getExecutorService().execute(new Runnable() {
337 public void run() {
338 getSelector().setSelectedServer(deviceServerModel.getSelectedItem());
339 }
340 });
341 }
342 });
343 }
344 return deviceServerCombo;
345 }
346
347 private JComboBox getDeviceNameCombo() {
348 if (deviceNameCombo == null) {
349 deviceNameCombo = new JComboBox();
350 deviceNameCombo.setModel(deviceNameModel);
351 deviceNameCombo.setPreferredSize(comboDim);
352 deviceNameCombo.setMinimumSize(comboDim);
353 deviceNameCombo.setMaximumSize(comboDim);
354 deviceNameCombo.setRenderer(new ComboRenderer());
355 deviceNameCombo.setEditable(true);
356 deviceNameCombo.addActionListener(new ActionListener() {
357 public void actionPerformed(ActionEvent e) {
358 if (settingFromSelector) return;
359 getExecutorService().execute(new Runnable(){
360 public void run() {
361 getSelector().setSelectedDevice(deviceNameModel.getSelectedItem());
362 }
363 });
364 }
365 });
366 }
367 return deviceNameCombo;
368 }
369
370 private JComboBox getPropertyNameCombo() {
371 if (propertyNameCombo == null) {
372 propertyNameCombo = new JComboBox();
373 propertyNameCombo.setModel(propertyNameModel);
374 propertyNameCombo.setPreferredSize(comboDim);
375 propertyNameCombo.setMinimumSize(comboDim);
376 propertyNameCombo.setMaximumSize(comboDim);
377 propertyNameCombo.setRenderer(new ComboRenderer());
378 propertyNameCombo.setEditable(true);
379 propertyNameCombo.addActionListener(new ActionListener() {
380 public void actionPerformed(ActionEvent e) {
381 if (settingFromSelector) return;
382 getExecutorService().execute(new Runnable() {
383 public void run() {
384 String obj = ((String)propertyNameCombo.getEditor().getItem());
385 if (obj != null) {
386 getSelector().setSelectedProperty(obj);
387 } else if (propertyNameCombo.getSelectedIndex() < 0 || propertyNameCombo.getSelectedItem() == null) {
388 getSelector().setSelectedProperty(null);
389 } else {
390 getSelector().setSelectedProperty(propertyNameModel.getSelectedItem());
391 }
392 }
393 });
394 }
395 });
396 }
397 return propertyNameCombo;
398 }
399
400 private void update(final HistoryParameters params) {
401 if (params == null || params.equals(historyParameters)) return;
402 HistoryParameters old = historyParameters;
403 historyParameters = params;
404 getExecutorService().execute(new Runnable() {
405 public void run() {
406 getSelector().setSelectedProtocol("TINE");
407 getSelector().setSelectedContext(params.getHistoryContext());
408 getSelector().setSelectedServer(params.getHistoryServer());
409 getSelector().setSelectedDevice(params.getHistoryDevice());
410 getSelector().setSelectedProperty(params.getHistoryProperty());
411
412 getSelector().setSelectedDevice(params.getHistoryDevice());
413 getIndexCombo().setSelectedItem(new Integer(params.getHistoryIndex()));
414 }
415 });
416
417 firePropertyChange(ConnectionParametersReceiver.CONNECTION_PARAMETERS_PROPERTY,old,historyParameters);
418 }
419
420
421
422
423
424
425 public HistoryParameters getHistoryParameters() {
426 if (!enableHistoryBox.isSelected()) return null;
427 return historyParameters;
428 }
429
430
431
432
433
434
435 public void setHistoryParameters(HistoryParameters parameters) {
436 if (this.historyParameters != null && this.historyParameters.equals(parameters)) return;
437 update(parameters);
438 }
439
440 public void setHistoryParameters(String context, String server, String device, String property) {
441 HistoryParameters hp = new HistoryParameters(context,server,device,property,0);
442 update(hp);
443 }
444
445
446
447
448
449
450 public void setSelectedIndex(int index) {
451 getIndexCombo().setSelectedItem(new Integer(index));
452 }
453
454
455
456
457
458
459 public void setIndexMax(int max) {
460 getIndexModel().setMaxIndex(max);
461 }
462
463
464
465
466
467
468 public int getSelectedIndex() {
469 return getIndexCombo().getSelectedIndex();
470 }
471
472 private void setSelector(Selector selector) {
473 if (this.selector != null && this.selector.equals(selector)) return;
474 if (this.selector != null) {
475 this.selector.removePropertyChangeListener(getSelectorPropertyListener());
476 this.selector.removeQueryListener(getSelectorQueryListener());
477 this.selector.removeExceptionListener(getExceptionListener());
478 }
479 Selector old = this.selector;
480 this.selector = selector;
481 if (this.selector != null) {
482 this.selector.addPropertyChangeListener(getSelectorPropertyListener());
483 this.selector.addQueryListener(getSelectorQueryListener());
484 this.selector.addExceptionListener(getExceptionListener());
485 }
486
487 getExecutorService().execute(new Runnable() {
488 public void run() {
489 TrendHistorySelectorGUI.this.selector.setSelectedProtocol(Selector.PROTOCOL_TINE);
490 fillAndSelectValue();
491 applySettings();
492 }
493 });
494 firePropertyChange("selector", old, this.selector);
495 }
496
497 protected Selector getSelector() {
498 return selector;
499 }
500
501 private ExceptionListener getExceptionListener() {
502 if (exceptionListener == null) {
503 exceptionListener = new ExceptionListener() {
504 public void exceptionReceived(ExceptionEvent e) {
505 e.getThrowable().printStackTrace();
506 }
507 };
508 }
509 return exceptionListener;
510 }
511
512 private PropertyChangeListener getSelectorPropertyListener() {
513 if (selectorPropertyListener == null) {
514 selectorPropertyListener = new PropertyChangeListener(){
515 public void propertyChange(PropertyChangeEvent evt) {
516 if (getSelector() == null) return;
517 if (!getPropertyNameCombo().isEnabled()) return;
518 final String name = evt.getPropertyName();
519 if ("selectedContext".equals(name)) {
520 deviceContextModel.setSelectedItem(getSelector().getSelectedContext());
521 } else if ("selectedSubSystem".equals(name)) {
522 subSystemModel.setSelectedItem(getSelector().getSelectedSubSystem());
523 } else if ("selectedServer".equals(name)) {
524 deviceServerModel.setSelectedItem(getSelector().getSelectedServer());
525 } else if ("selectedDevice".equals(name)) {
526 deviceNameModel.setSelectedItem(getSelector().getSelectedDevice());
527 } else if ("selectedProperty".equals(name)) {
528 propertyNameModel.setSelectedItem(getSelector().getSelectedProperty());
529 } else if ("availableContexts".equals(name)) {
530 deviceContextModel.setElements(getSelector().getAvailableContexts());
531 } else if ("availableSubsystems".equals(name)) {
532 subSystemModel.setElements(getSelector().getAvailableSubsystems());
533 } else if ("availableServers".equals(name)) {
534 deviceServerModel.setElements(getSelector().getAvailableServers());
535 } else if ("availableDevices".equals(name)) {
536 deviceNameModel.setElements(getSelector().getAvailableDevices());
537 } else if ("availableProperties".equals(name)) {
538 propertyNameModel.setElements(getSelector().getAvailableProperties());
539 }
540 applySettings();
541 }
542 };
543 }
544 return selectorPropertyListener;
545 }
546
547 private void fillAndSelectValue() {
548 settingFromSelector = true;
549 deviceContextModel.setElements(getSelector().getAvailableContexts());
550 deviceContextModel.setSelectedItem(getSelector().getSelectedContext());
551 subSystemModel.setElements(getSelector().getAvailableSubsystems());
552 subSystemModel.setSelectedItem(getSelector().getSelectedSubSystem());
553 deviceServerModel.setElements(getSelector().getAvailableServers());
554 deviceServerModel.setSelectedItem(getSelector().getSelectedServer());
555 deviceNameModel.setElements(getSelector().getAvailableDevices());
556 deviceNameModel.setSelectedItem(getSelector().getSelectedDevice());
557 propertyNameModel.setElements(getSelector().getAvailableProperties());
558 propertyNameModel.setSelectedItem(getSelector().getSelectedProperty());
559 settingFromSelector = false;
560 }
561
562 private QueryListener getSelectorQueryListener() {
563 if (selectorQueryListener == null) {
564 selectorQueryListener = new QueryListener() {
565 public void queryFinished(QueryEvent e) {
566 if (getSelector() == null) return;
567 synchronized(selector) {
568 fillAndSelectValue();
569 applySettings();
570 setCombosEnabled(true);
571 }
572 }
573 public void queryStarted(QueryEvent e) {
574 if (getSelector() == null) return;
575 synchronized (selector) {
576 setCombosEnabled(false);
577 }
578
579 }
580 };
581 }
582 return selectorQueryListener;
583 }
584
585 private boolean combosEnabled = true;
586 private void setCombosEnabled(boolean enabled) {
587
588 if (enabled && getSelector().isBusy()) {
589 enabled = false;
590 }
591
592 this.combosEnabled = enabled;
593 SwingUtilities.invokeLater(new Runnable() {
594
595 @Override
596 public void run() {
597 boolean b = combosEnabled && historyEnabled;
598 getDeviceContextCombo().setEnabled(b);
599 getSubSystemCombo().setEnabled(b);
600 getDeviceServerCombo().setEnabled(b);
601 getDeviceNameCombo().setEnabled(b);
602 getPropertyNameCombo().setEnabled(b);
603 getIndexCombo().setEnabled(b);
604
605 }
606 });
607
608 }
609
610 public static void main(String[] args) {
611 try {
612
613 TrendHistorySelectorGUI c= new TrendHistorySelectorGUI();
614 RunnerHelper.runComponent(c,300,370);
615 } catch (Exception e) {
616 e.printStackTrace();
617 }
618
619 }
620
621 private ThreadPoolExecutor executorService;
622 private ThreadPoolExecutor getExecutorService() {
623 if (executorService == null) {
624 executorService = new ThreadPoolExecutor(1, 1, 0, TimeUnit.NANOSECONDS,
625 new LinkedBlockingQueue<Runnable>()){
626 @Override
627 protected void afterExecute(Runnable r, Throwable t) {
628 super.afterExecute(r, t);
629 if (t != null) {
630 t.printStackTrace();
631 }
632 }
633 };
634 executorService.setRejectedExecutionHandler(new RejectedExecutionHandler(){
635 public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
636
637 }
638 });
639 }
640 return executorService;
641 }
642
643 }
644