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 import java.awt.datatransfer.Clipboard;
31 import java.awt.datatransfer.DataFlavor;
32 import java.awt.datatransfer.StringSelection;
33 import java.awt.datatransfer.Transferable;
34 import java.awt.datatransfer.UnsupportedFlavorException;
35 import java.awt.event.ActionEvent;
36 import java.awt.event.ActionListener;
37 import java.awt.event.FocusEvent;
38 import java.awt.event.FocusListener;
39 import java.awt.event.MouseAdapter;
40 import java.awt.event.MouseEvent;
41 import java.awt.event.MouseMotionAdapter;
42 import java.beans.Beans;
43 import java.beans.Customizer;
44 import java.beans.PropertyChangeEvent;
45 import java.beans.PropertyChangeListener;
46 import java.io.IOException;
47 import java.util.ArrayList;
48 import java.util.Arrays;
49 import java.util.StringTokenizer;
50 import java.util.concurrent.LinkedBlockingQueue;
51 import java.util.concurrent.RejectedExecutionHandler;
52 import java.util.concurrent.ThreadPoolExecutor;
53 import java.util.concurrent.TimeUnit;
54
55 import javax.swing.DefaultListCellRenderer;
56 import javax.swing.JButton;
57 import javax.swing.JCheckBox;
58 import javax.swing.JComboBox;
59 import javax.swing.JComponent;
60 import javax.swing.JDialog;
61 import javax.swing.JFrame;
62 import javax.swing.JLabel;
63 import javax.swing.JList;
64 import javax.swing.JMenuItem;
65 import javax.swing.JPanel;
66 import javax.swing.JPopupMenu;
67 import javax.swing.JTextField;
68 import javax.swing.SwingConstants;
69 import javax.swing.SwingUtilities;
70 import javax.swing.TransferHandler;
71
72 import com.cosylab.gui.components.NumberField;
73 import com.cosylab.gui.components.util.ComponentPositioner;
74 import com.cosylab.gui.components.util.IconHelper;
75 import com.cosylab.gui.components.util.RunnerHelper;
76 import com.cosylab.gui.util.DisplayerParametersSelectorDialog;
77 import com.cosylab.util.ListenerList;
78 import com.cosylab.util.NumericStringComparator;
79
80 import de.desy.acop.displayers.AcopSpider;
81 import de.desy.acop.displayers.tools.ConnectionParametersReceiver;
82 import de.desy.acop.displayers.tools.MultipleAcopDisplayer;
83 import de.desy.acop.transport.AccessMode;
84 import de.desy.acop.transport.ConnectionParameters;
85
86
87
88
89
90
91
92
93
94
95
96
97
98 public class SelectorGUI extends JPanel implements Customizer {
99
100 private class ComboRenderer extends DefaultListCellRenderer {
101
102 private static final long serialVersionUID = 1L;
103
104 @Override
105 public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
106
107 Component c = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
108 if (value != null && c instanceof JLabel) {
109 ((JLabel)c).setToolTipText(String.valueOf(value));
110 }
111 return c;
112 }
113 }
114
115 private enum ExtendedData{
116 BYTE ("byte"),
117 SHORT ("short"),
118 INT16 ("int16"),
119 INT ("int"),
120 INT32 ("int32"),
121 LONG ("long"),
122 INT64 ("int64"),
123 DOUBLE ("double"),
124 FLOAT ("float"),
125 CHAR ("char"),
126 STRING ("String");
127
128 private final String displayName;
129
130 private ExtendedData(String name) {
131 displayName = name;
132 }
133
134 public String toString() {
135 return displayName;
136 }
137 }
138
139
140 private static final long serialVersionUID = 1647591422586736408L;
141
142 private static final String AUTO = "Auto";
143 private static final String ACTUAL = "Actual";
144 private Object disp;
145
146 private JPanel commandPanel;
147 private JComboBox accessProtocolCombo;
148 private JComboBox deviceContextCombo;
149 private JComboBox subSystemCombo;
150 private JComboBox deviceServerCombo;
151 private JComboBox deviceNameCombo;
152 private JComboBox propertyNameCombo;
153 private AcopComboBoxModel<String> accessProtocolModel;
154 private AcopComboBoxModel<String> deviceContextModel;
155 private AcopComboBoxModel<String> subSystemModel;
156 private AcopComboBoxModel<String> deviceServerModel;
157 private AcopComboBoxModel<String> deviceNameModel;
158 private AcopComboBoxModel<String> propertyNameModel;
159 private AcopComboBoxModel<String> arraySizeModel;
160 private AcopComboBoxModel<ExtendedData> extendedDataModel;
161 private NumberField accessRateField;
162 private JLabel accessProtocolLabel;
163 private JLabel deviceContextLabel;
164 private JLabel subSystemLabel;
165 private JLabel deviceServerLabel;
166 private JLabel deviceNameLabel;
167 private JLabel propertyNameLabel;
168 private JLabel accessRateLabel;
169 private JLabel selectionLabel;
170 private JLabel descriptionLabel;
171 private JCheckBox showStockProperties;
172 private JComboBox accessModeCombo;
173 private JLabel accessModeLabel;
174
175 private JLabel arraySizeLabel;
176 private JComboBox arraySizeCombo;
177
178 private JLabel extendedDataLabel;
179 private JComboBox extendedDataCombo;
180 private JTextField extendedDataTextField;
181
182 private JButton advancedSelectorButton;
183 private SelectorListGUI listSelector;
184 private JDialog advancedSelectorDialog;
185
186 private ConnectionParameters connectionParameters;
187 private volatile Selector selector;
188
189 private ListenerList selectorGUIListeners = new ListenerList(SelectorGUIListener.class);
190
191 private PropertyChangeListener selectorPropertyListener;
192 private QueryListener selectorQueryListener;
193 private ExceptionListener exceptionListener;
194 private NumericStringComparator comparator = new NumericStringComparator();
195
196 private AcopSpider spiderBean;
197 private boolean onlyConnectionParametersMode = false;
198 private boolean settingFromSelector = false;
199 private JPopupMenu popupMenu;
200 private JPopupMenu selectionPopup;
201
202 private Dimension comboDim = new Dimension(170,21);
203
204
205
206
207
208 public SelectorGUI() {
209 super();
210 initialize();
211 }
212
213 private void initialize() {
214 deviceContextModel= new AcopComboBoxModel<String>(String.class);
215 subSystemModel = new AcopComboBoxModel<String>(String.class);
216 deviceServerModel= new AcopComboBoxModel<String>(String.class);
217 deviceNameModel= new AcopComboBoxModel<String>(String.class);
218 propertyNameModel= new AcopComboBoxModel<String>(String.class);
219 accessProtocolModel= new AcopComboBoxModel<String>(String.class);
220 arraySizeModel = new AcopComboBoxModel<String>(String.class);
221 extendedDataModel = new AcopComboBoxModel<ExtendedData>(ExtendedData.class);
222 setSelector(new Selector());
223
224 this.setLayout(new GridBagLayout());
225 this.add(getCommandPanel(), new GridBagConstraints(0,0,1,1,1,1,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0,0,0,0),0,0));
226 this.addMouseListener(new MouseAdapter() {
227 @Override
228 public void mouseReleased(MouseEvent e) {
229 if (SwingUtilities.isRightMouseButton(e)) {
230 getPopUpMenu().show(SelectorGUI.this, e.getX(), e.getY());
231 }
232 }
233 });
234
235 }
236
237 private JPopupMenu getPopUpMenu() {
238 if (popupMenu == null) {
239 popupMenu = new JPopupMenu();
240 JMenuItem reset = new JMenuItem("Reset selector");
241 reset.addActionListener(new ActionListener(){
242 public void actionPerformed(ActionEvent e) {
243 getExecutorService().shutdownNow();
244 executorService = null;
245 setSelector(new Selector());
246 }
247 });
248 popupMenu.add(reset);
249 }
250 return popupMenu;
251 }
252
253 private JPopupMenu getSelectionPopUpMenu() {
254 if (selectionPopup == null) {
255 selectionPopup = new JPopupMenu();
256 JMenuItem copy = new JMenuItem("Copy");
257 copy.addActionListener(new ActionListener(){
258 public void actionPerformed(ActionEvent e) {
259 Clipboard cb = getToolkit().getSystemClipboard();
260 StringSelection strSel = new StringSelection(getSelectionLabel().getText());
261 cb.setContents(strSel, strSel);
262 }
263 });
264 selectionPopup.add(copy);
265 }
266 return selectionPopup;
267 }
268
269 private void applySettings() {
270
271 try {
272 String remoteName = getSelector().getRemoteName();
273 int accessRate = getAccessRateField().getValue().intValue();
274 ConnectionParameters old = connectionParameters;
275 connectionParameters = new ConnectionParameters(remoteName,(AccessMode)getAccessModeCombo().getSelectedItem(), accessRate, getArraySize(), getExtendedData());
276 firePropertyChange(ConnectionParametersReceiver.CONNECTION_PARAMETERS_PROPERTY,old,getConnectionParameters());
277 } catch (Exception e) {
278 handleException(e);
279 }
280 }
281
282 private int getArraySize() {
283 String arraySize = arraySizeModel.getSelectedItem();
284 if (arraySize == null || AUTO.equals(arraySize)) return ConnectionParameters.AUTO_PROPERTY_SIZE;
285 else if (arraySize.startsWith(ACTUAL)) return ConnectionParameters.ACTUAL_PROPERTY_SIZE;
286 else return Integer.parseInt(arraySize);
287
288 }
289
290 private JPanel getCommandPanel() {
291 if (commandPanel == null) {
292 commandPanel = new JPanel(new GridBagLayout());
293 accessProtocolLabel = new JLabel("Access protocol");
294 accessProtocolLabel.setPreferredSize(new Dimension(120,21));
295 accessProtocolLabel.setMinimumSize(new Dimension(120,21));
296 accessProtocolLabel.setMaximumSize(new Dimension(120,21));
297 commandPanel.add(accessProtocolLabel, new GridBagConstraints(0,0,1,1,1,1,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0,1,1,1), 0,0));
298 commandPanel.add(getAccessProtocolCombo(), new GridBagConstraints(1,0,2,1,1,1,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0,1,1,1), 0,0));
299
300 deviceContextLabel = new JLabel("Device context");
301 deviceContextLabel.setPreferredSize(new Dimension(120,21));
302 deviceContextLabel.setMinimumSize(new Dimension(120,21));
303 deviceContextLabel.setMaximumSize(new Dimension(120,21));
304 commandPanel.add(deviceContextLabel, new GridBagConstraints(0,1,1,1,1,1,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0,1,1,1), 0,0));
305 commandPanel.add(getDeviceContextCombo(), new GridBagConstraints(1,1,2,1,1,1,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0,1,1,1), 0,0));
306
307 subSystemLabel = new JLabel("Device subsystem");
308 subSystemLabel.setPreferredSize(new Dimension(120,21));
309 subSystemLabel.setMinimumSize(new Dimension(120,21));
310 subSystemLabel.setMaximumSize(new Dimension(120,21));
311 commandPanel.add(subSystemLabel, new GridBagConstraints(0,2,1,1,1,1,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0,1,1,1), 0,0));
312 commandPanel.add(getSubSystemCombo(), new GridBagConstraints(1,2,2,1,1,1,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0,1,1,1), 0,0));
313
314 deviceServerLabel = new JLabel("Device server");
315 deviceServerLabel.setPreferredSize(new Dimension(120,21));
316 deviceServerLabel.setMinimumSize(new Dimension(120,21));
317 deviceServerLabel.setMaximumSize(new Dimension(120,21));
318 commandPanel.add(deviceServerLabel, new GridBagConstraints(0,3,1,1,1,1,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0,1,1,1), 0,0));
319 commandPanel.add(getDeviceServerCombo(), new GridBagConstraints(1,3,2,1,1,1,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0,1,1,1), 0,0));
320
321 deviceNameLabel = new JLabel("Device name");
322 deviceNameLabel.setPreferredSize(new Dimension(120,21));
323 deviceNameLabel.setMinimumSize(new Dimension(120,21));
324 deviceNameLabel.setMaximumSize(new Dimension(120,21));
325 commandPanel.add(deviceNameLabel, new GridBagConstraints(0,4,1,1,1,1,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0,1,1,1), 0,0));
326 commandPanel.add(getDeviceNameCombo(), new GridBagConstraints(1,4,2,1,1,1,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0,1,1,1), 0,0));
327
328 propertyNameLabel = new JLabel("Property name");
329 propertyNameLabel.setPreferredSize(new Dimension(120,21));
330 propertyNameLabel.setMinimumSize(new Dimension(120,21));
331 propertyNameLabel.setMaximumSize(new Dimension(120,21));
332 commandPanel.add(propertyNameLabel, new GridBagConstraints(0,5,1,1,1,1,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0,1,1,1), 0,0));
333 commandPanel.add(getPropertyNameCombo(), new GridBagConstraints(1,5,2,1,1,1,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0,1,1,1), 0,0));
334
335 commandPanel.add(getShowStockPropertiesCheckBox(), new GridBagConstraints(0,6,3,1,1,1,GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0,1,1,1), 0,0));
336
337 accessRateLabel = new JLabel("Access rate");
338 accessRateLabel.setPreferredSize(new Dimension(120,21));
339 accessRateLabel.setMinimumSize(new Dimension(120,21));
340 accessRateLabel.setMaximumSize(new Dimension(120,21));
341 commandPanel.add(accessRateLabel, new GridBagConstraints(0,7,1,1,1,1,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0,1,1,1), 0,0));
342 commandPanel.add(getAccessRateField(), new GridBagConstraints(1,7,2,1,1,1,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0,1,1,1), 0,0));
343
344 accessModeLabel = new JLabel("Access mode");
345 accessModeLabel.setPreferredSize(new Dimension(120,21));
346 accessModeLabel.setMinimumSize(new Dimension(120,21));
347 accessModeLabel.setMaximumSize(new Dimension(120,21));
348 commandPanel.add(accessModeLabel, new GridBagConstraints(0,8,1,1,1,1,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0,1,1,1), 0,0));
349 commandPanel.add(getAccessModeCombo(), new GridBagConstraints(1,8,2,1,1,1,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0,1,1,1), 0,0));
350
351
352 arraySizeLabel = new JLabel("Data size");
353 arraySizeLabel.setPreferredSize(new Dimension(120,21));
354 arraySizeLabel.setMinimumSize(new Dimension(120,21));
355 arraySizeLabel.setMaximumSize(new Dimension(120,21));
356 arraySizeLabel.setToolTipText("Size of connected array, ACTUAL takes actual size, AUTO adjust size to the widget.");
357 commandPanel.add(arraySizeLabel, new GridBagConstraints(0,9,1,1,1,1,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0,1,1,1), 0,0));
358 commandPanel.add(getArraySizeCombo(), new GridBagConstraints(1,9,2,1,1,1,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0,1,1,1), 0,0));
359
360 extendedDataLabel = new JLabel("Extended Data");
361 extendedDataLabel.setPreferredSize(new Dimension(120,21));
362 extendedDataLabel.setMinimumSize(new Dimension(120,21));
363 extendedDataLabel.setMaximumSize(new Dimension(120,21));
364 commandPanel.add(extendedDataLabel, new GridBagConstraints(0,10,1,1,1,1,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0,1,1,1),0,0));
365 JPanel p = new JPanel(new GridBagLayout());
366 p.add(getExtendedDataCombo(), new GridBagConstraints(0,0,1,1,0,1,GridBagConstraints.CENTER,GridBagConstraints.VERTICAL,new Insets(0,0,1,1),0,0));
367 p.add(getExtendedDataTextField(), new GridBagConstraints(1,0,1,1,1,0,GridBagConstraints.CENTER,GridBagConstraints.BOTH,new Insets(0,0,0,0),0,0));
368 Dimension dim = new Dimension(comboDim.width, comboDim.height + 1);
369 p.setMaximumSize(dim);
370 p.setMinimumSize(dim);
371 p.setPreferredSize(dim);
372 commandPanel.add(p, new GridBagConstraints(1,10,2,1,1,1,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0,1,1,1), 0,0));
373 commandPanel.add(getAdvancedSelectorButton(),new GridBagConstraints(0,11,3,1,1,0,GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(5,1,5,1),0,0));
374 commandPanel.add(getSelectionLabel(), new GridBagConstraints(0,12,3,1,1,0,GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(0,1,1,1),0,0));
375
376 if (!Beans.isDesignTime()) {
377 commandPanel.add(getDescriptionLabel(), new GridBagConstraints(0,13,3,1,1,0,GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0,1,1,1),0,0));
378 } else {
379 commandPanel.add(getSpiderBean(), new GridBagConstraints(1,13,2,1,1,0,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0,1,1,1),0,0));
380 }
381
382 setCombosEnabled(true);
383 }
384 return commandPanel;
385 }
386
387 private JComboBox getAccessModeCombo() {
388 if (accessModeCombo == null) {
389 accessModeCombo = new JComboBox(AccessMode.values());
390 accessModeCombo.removeItem(AccessMode.WRITE);
391 accessModeCombo.removeItem(AccessMode.WRITE_CONNECT);
392 accessModeCombo.setSelectedItem(AccessMode.POLL);
393 accessModeCombo.setPreferredSize(comboDim);
394 accessModeCombo.setMinimumSize(comboDim);
395 accessModeCombo.setMaximumSize(comboDim);
396 accessModeCombo.setRenderer(new ComboRenderer());
397 accessModeCombo.addActionListener(new ActionListener(){
398 public void actionPerformed(ActionEvent e) {
399 if (settingFromSelector) return;
400 refreshSelectionLabel();
401 getSelector().setAccessMode((AccessMode)accessModeCombo.getSelectedItem());
402 }
403 });
404 }
405 return accessModeCombo;
406 }
407
408 private JLabel getSelectionLabel() {
409 if (selectionLabel == null) {
410 selectionLabel = new JLabel();
411 selectionLabel.setPreferredSize(new Dimension(240,21));
412 selectionLabel.setMinimumSize(new Dimension(240,21));
413 selectionLabel.setMaximumSize(new Dimension(240,21));
414 selectionLabel.setIcon(IconHelper.createIcon("icons/development/ApplicationDeploy16.gif"));
415 selectionLabel.setHorizontalAlignment(SwingConstants.CENTER);
416 selectionLabel.addMouseMotionListener(new MouseMotionAdapter() {
417
418 @Override
419 public void mouseDragged(MouseEvent e) {
420 applySettings();
421 selectionLabel.getTransferHandler().exportAsDrag(selectionLabel,e,TransferHandler.COPY);
422 }
423
424 });
425
426 selectionLabel.addMouseListener(new MouseAdapter() {
427 @Override
428 public void mouseReleased(MouseEvent e) {
429 if (e.getButton() == MouseEvent.BUTTON3 && e.isPopupTrigger()) {
430 getSelectionPopUpMenu().show(selectionLabel, e.getX(), e.getY());
431 }
432 }
433 });
434
435 selectionLabel.setTransferHandler(new TransferHandler() {
436
437 private static final long serialVersionUID = 1658117801619157639L;
438 private DisplayerParametersSelectorDialog dialog;
439 @Override
440 public boolean importData(JComponent comp, Transferable t) {
441 try {
442 if (t.isDataFlavorSupported(DataFlavor.stringFlavor)) {
443 if (getConnectionParameters() == null) return false;
444 String input = t.getTransferData(DataFlavor.stringFlavor).toString();
445 StringTokenizer st = new StringTokenizer(input, "\n");
446 ArrayList<ConnectionParameters> al = new ArrayList<ConnectionParameters>(0);
447 while (st.hasMoreTokens()) {
448 al.add(new ConnectionParameters(
449 st.nextToken(), AccessMode.POLL,
450 1000));
451 }
452 ConnectionParameters[] cp = al.toArray(new ConnectionParameters[]{});
453 int idx = selectByDialog(getSelectionLabel(), cp);
454 if (idx < 0) return false;
455 setConnectionParameters(cp[idx]);
456 return true;
457 }
458 } catch (Exception e) {
459 handleException(e);
460 }
461 return false;
462 }
463
464 @Override
465 protected Transferable createTransferable(JComponent c) {
466 return new Transferable() {
467
468 public Object getTransferData(DataFlavor flavor)
469 throws UnsupportedFlavorException, IOException {
470 if (flavor.isFlavorTextType()) {
471 return getConnectionParameters().getRemoteName();
472 }
473 throw new UnsupportedFlavorException(flavor);
474 }
475
476 public boolean isDataFlavorSupported(DataFlavor flavor) {
477 return flavor.isFlavorTextType();
478 }
479
480 public DataFlavor[] getTransferDataFlavors() {
481 return new DataFlavor[]{DataFlavor.stringFlavor};
482 }
483 };
484 }
485
486 @Override
487 public boolean canImport(JComponent comp, DataFlavor[] transferFlavors) {
488 for (int i = 0; i < transferFlavors.length; i++) {
489 if (transferFlavors[i].isFlavorTextType()) {
490 return true;
491 }
492 }
493 return false;
494 }
495 @Override
496 public int getSourceActions(JComponent c) {
497 return TransferHandler.COPY;
498 }
499
500 protected int selectByDialog(Component c, ConnectionParameters[] dp) {
501 if (dialog == null) {
502 dialog = new DisplayerParametersSelectorDialog(c, "Adding Source", "Select Source:");
503 }
504 String[] s= new String[dp.length];
505 for (int i = 0; i < s.length; i++) {
506 s[i]=dp[i].getRemoteName();
507 }
508 return dialog.showSelectionDialog(c,s);
509 }
510 });
511
512 refreshSelectionLabel();
513 }
514 return selectionLabel;
515 }
516
517 private JLabel getDescriptionLabel() {
518 if (descriptionLabel == null) {
519 descriptionLabel = new JLabel();
520 descriptionLabel.setPreferredSize(new Dimension(240,21));
521 descriptionLabel.setMinimumSize(new Dimension(240,21));
522 descriptionLabel.setMaximumSize(new Dimension(240,21));
523 }
524
525 return descriptionLabel;
526 }
527
528 private JComboBox getAccessProtocolCombo() {
529 if (accessProtocolCombo == null) {
530 accessProtocolCombo = new JComboBox();
531 accessProtocolCombo.setModel(accessProtocolModel);
532 accessProtocolModel.setElements(new String[]{Selector.PROTOCOL_TINE});
533 accessProtocolModel.setSelectedItem(null);
534 accessProtocolCombo.setPreferredSize(comboDim);
535 accessProtocolCombo.setMinimumSize(comboDim);
536 accessProtocolCombo.setMaximumSize(comboDim);
537 accessProtocolCombo.setRenderer(new ComboRenderer());
538 accessProtocolCombo.addActionListener(new ActionListener(){
539 public void actionPerformed(ActionEvent e) {
540 if (settingFromSelector) return;
541 getExecutorService().execute(new Runnable() {
542 public void run() {
543 getSelector().setSelectedProtocol(accessProtocolModel.getSelectedItem());
544 }
545 });
546 }
547 });
548 }
549 return accessProtocolCombo;
550 }
551
552 private JComboBox getSubSystemCombo() {
553 if (subSystemCombo == null) {
554 subSystemCombo = new JComboBox();
555
556
557
558
559 subSystemCombo.setModel(subSystemModel);
560 subSystemCombo.setPreferredSize(comboDim);
561 subSystemCombo.setMinimumSize(comboDim);
562 subSystemCombo.setMaximumSize(comboDim);
563 subSystemCombo.setRenderer(new ComboRenderer());
564 subSystemCombo.addActionListener(new ActionListener() {
565 public void actionPerformed(ActionEvent e) {
566 if (settingFromSelector) return;
567 getExecutorService().execute(new Runnable() {
568 public void run() {
569 getSelector().setSelectedSubSystem(subSystemModel.getSelectedItem());
570 }
571 });
572 }
573 });
574 }
575 return subSystemCombo;
576 }
577
578 private JComboBox getDeviceContextCombo() {
579 if (deviceContextCombo == null) {
580 deviceContextCombo = new JComboBox();
581 deviceContextCombo.setModel(deviceContextModel);
582 deviceContextCombo.setPreferredSize(comboDim);
583 deviceContextCombo.setMinimumSize(comboDim);
584 deviceContextCombo.setMaximumSize(comboDim);
585 deviceContextCombo.setRenderer(new ComboRenderer());
586 deviceContextCombo.addActionListener(new ActionListener() {
587 public void actionPerformed(ActionEvent e) {
588 if (settingFromSelector) return;
589 getExecutorService().execute(new Runnable() {
590 public void run() {
591 getSelector().setSelectedContext(deviceContextModel.getSelectedItem());
592 }
593 });
594
595 }
596 });
597 }
598 return deviceContextCombo;
599 }
600
601 private JComboBox getDeviceServerCombo() {
602 if (deviceServerCombo == null) {
603 deviceServerCombo = new JComboBox();
604 deviceServerCombo.setModel(deviceServerModel);
605 deviceServerCombo.setPreferredSize(comboDim);
606 deviceServerCombo.setMinimumSize(comboDim);
607 deviceServerCombo.setMaximumSize(comboDim);
608 deviceServerCombo.setRenderer(new ComboRenderer());
609 deviceServerCombo.addActionListener(new ActionListener() {
610 public void actionPerformed(ActionEvent e) {
611 if (settingFromSelector) return;
612 getExecutorService().execute(new Runnable() {
613 public void run() {
614 getSelector().setSelectedServer(deviceServerModel.getSelectedItem());
615 }
616 });
617 }
618 });
619 }
620 return deviceServerCombo;
621 }
622
623 private JComboBox getDeviceNameCombo() {
624 if (deviceNameCombo == null) {
625 deviceNameCombo = new JComboBox();
626 deviceNameCombo.setModel(deviceNameModel);
627 deviceNameCombo.setPreferredSize(comboDim);
628 deviceNameCombo.setMinimumSize(comboDim);
629 deviceNameCombo.setMaximumSize(comboDim);
630 deviceNameCombo.setRenderer(new ComboRenderer());
631 deviceNameCombo.setEditable(true);
632 deviceNameCombo.addActionListener(new ActionListener() {
633 public void actionPerformed(ActionEvent e) {
634 if (settingFromSelector) return;
635 getExecutorService().execute(new Runnable(){
636 public void run() {
637 getSelector().setSelectedDevice(deviceNameModel.getSelectedItem());
638 fireSelectorGUIEvent(SelectorUtilities.isConnectionParametersValid(getConnectionParameters()));
639 }
640 });
641 }
642 });
643 }
644 return deviceNameCombo;
645 }
646
647 private JComboBox getPropertyNameCombo() {
648 if (propertyNameCombo == null) {
649 propertyNameCombo = new JComboBox();
650 propertyNameCombo.setModel(propertyNameModel);
651 propertyNameCombo.setPreferredSize(comboDim);
652 propertyNameCombo.setMinimumSize(comboDim);
653 propertyNameCombo.setMaximumSize(comboDim);
654 propertyNameCombo.setRenderer(new ComboRenderer());
655 propertyNameCombo.setEditable(true);
656 propertyNameCombo.addActionListener(new ActionListener() {
657 public void actionPerformed(ActionEvent e) {
658 if (settingFromSelector) return;
659 getExecutorService().execute(new Runnable() {
660 public void run() {
661 String obj = ((String)propertyNameCombo.getEditor().getItem());
662 if (obj != null) {
663 getSelector().setSelectedProperty(obj);
664 fireSelectorGUIEvent(SelectorUtilities.isConnectionParametersValid(getConnectionParameters()));
665 } else if (propertyNameCombo.getSelectedIndex() < 0 || propertyNameCombo.getSelectedItem() == null) {
666 getSelector().setSelectedProperty(null);
667 fireSelectorGUIEvent(false);
668 } else {
669 getSelector().setSelectedProperty(propertyNameModel.getSelectedItem());
670 fireSelectorGUIEvent(true);
671 }
672 }
673 });
674 }
675 });
676 }
677 return propertyNameCombo;
678 }
679
680 private JCheckBox getShowStockPropertiesCheckBox() {
681 if (showStockProperties == null) {
682 showStockProperties = new JCheckBox("Show stock properties");
683 showStockProperties.addActionListener(new ActionListener() {
684 public void actionPerformed(ActionEvent e) {
685 if (settingFromSelector) return;
686 getExecutorService().execute(new Runnable() {
687 public void run() {
688 getSelector().setShowStockProperties(showStockProperties.isSelected());
689 }
690 });
691 }
692 });
693 }
694 return showStockProperties;
695 }
696
697 private NumberField getAccessRateField() {
698 if (accessRateField == null) {
699 accessRateField = new NumberField();
700 accessRateField.setNumberType(Integer.class);
701 accessRateField.setFormat("%d");
702 accessRateField.setValue(1000);
703 accessRateField.setPreferredSize(comboDim);
704 accessRateField.setMinimumSize(comboDim);
705 accessRateField.setMaximumSize(comboDim);
706 accessRateField.setText(String.valueOf(1000));
707 accessRateField.addPropertyChangeListener("value", new PropertyChangeListener() {
708 public void propertyChange(PropertyChangeEvent evt) {
709 if (settingFromSelector) return;
710 refreshSelectionLabel();
711 getSelector().setAccessRate(accessRateField.getValue().intValue());
712 }
713 });
714 }
715 return accessRateField;
716 }
717
718 private JComboBox getArraySizeCombo() {
719 if (arraySizeCombo == null) {
720 arraySizeCombo = new JComboBox();
721 arraySizeCombo.setEditable(true);
722 arraySizeCombo.setPreferredSize(comboDim);
723 arraySizeCombo.setMinimumSize(comboDim);
724 arraySizeCombo.setMaximumSize(comboDim);
725 arraySizeCombo.setRenderer(new ComboRenderer());
726 arraySizeCombo.setModel(arraySizeModel);
727 arraySizeModel.setElements(new String[]{"1",ACTUAL,AUTO});
728 arraySizeModel.setSelectedItem(AUTO);
729 arraySizeCombo.setToolTipText("Size of connected array, ACTUAL takes actual size, AUTO adjusts size to the widget.");
730 arraySizeCombo.addActionListener(new ActionListener() {
731 @SuppressWarnings("unchecked")
732 public void actionPerformed(ActionEvent e) {
733 Object o = arraySizeCombo.getEditor().getItem();
734 try {
735 int size = Integer.parseInt((String)o);
736 if (size <=0 ) return;
737 } catch(NumberFormatException ex) {
738 if (o.toString().startsWith(ACTUAL)) {
739 arraySizeModel.setSelectedItem(o);
740 } else {
741 arraySizeModel.setSelectedItem(AUTO);
742 }
743 refreshSelectionLabel();
744 return;
745 }
746 if (arraySizeModel.contains(o)) {
747 refreshSelectionLabel();
748 return;
749 }
750 String[] elements = new String[arraySizeModel.getElements().length + 1];
751 for (int i = 0; i < arraySizeModel.getElements().length; i ++) {
752 elements[i] = arraySizeModel.getElements()[i];
753 }
754 elements[elements.length-1] = (String)o;
755 Arrays.sort(elements, comparator);
756 arraySizeModel.setElements(elements);
757 refreshSelectionLabel();
758 }
759 });
760 }
761
762 return arraySizeCombo;
763 }
764
765 private JTextField getExtendedDataTextField() {
766 if(extendedDataTextField == null) {
767 extendedDataTextField = new JTextField();
768 extendedDataTextField.addActionListener(new ActionListener() {
769 public void actionPerformed(ActionEvent arg0) {
770 if (settingFromSelector) return;
771 refreshSelectionLabel();
772 }
773 });
774 extendedDataTextField.addFocusListener(new FocusListener() {
775 public void focusLost(FocusEvent e) {
776 if (settingFromSelector) return;
777 refreshSelectionLabel();
778 }
779 public void focusGained(FocusEvent e) {}
780 });
781 }
782 return extendedDataTextField;
783 }
784
785 private JComboBox getExtendedDataCombo() {
786 if (extendedDataCombo == null) {
787 extendedDataCombo = new JComboBox();
788 extendedDataCombo.setRenderer(new ComboRenderer());
789 extendedDataCombo.setModel(extendedDataModel);
790 extendedDataModel.setElements(ExtendedData.values());
791
792 SwingUtilities.invokeLater(new Runnable() {
793 public void run() {
794 extendedDataModel.setSelectedItem(ExtendedData.DOUBLE);
795 }
796 });
797 extendedDataCombo.addActionListener(new ActionListener() {
798 public void actionPerformed(ActionEvent e) {
799 if (settingFromSelector) return;
800 refreshSelectionLabel();
801 }
802 });
803 }
804
805 return extendedDataCombo;
806 }
807
808 private Object getExtendedData() {
809 try {
810 ExtendedData ed = (ExtendedData) getExtendedDataCombo().getSelectedItem();
811 if(getExtendedDataTextField().getText().isEmpty()){
812 return null;
813 }
814 String[] stringArray = getExtendedDataTextField().getText().split(";");
815 switch (ed) {
816 case DOUBLE:{
817 double[] dbl = new double[stringArray.length];
818 for(int i=0;i<dbl.length;i++)
819 dbl[i]=Double.parseDouble(stringArray[i]);
820 return dbl;
821 }
822 case FLOAT:{
823 float[] flt = new float[stringArray.length];
824 for(int i=0;i<flt.length;i++)
825 flt[i]=Float.parseFloat(stringArray[i]);
826 return flt;
827 }
828 case INT32:
829 case INT:{
830 int[] intgr = new int[stringArray.length];
831 for(int i=0;i<intgr.length;i++)
832 intgr[i]=Integer.parseInt(stringArray[i]);
833 return intgr;
834 }
835 case INT16:
836 case SHORT:{
837 short[] shrt = new short[stringArray.length];
838 for(int i=0;i<shrt.length;i++)
839 shrt[i]=Short.parseShort(stringArray[i]);
840 return shrt;
841 }
842 case BYTE:{
843 byte[] byt = new byte[stringArray.length];
844 for(int i=0;i<byt.length;i++)
845 byt[i]=Byte.parseByte(stringArray[i]);
846 return byt;
847 }
848 case INT64:
849 case LONG:{
850 long[] lng = new long[stringArray.length];
851 for(int i=0;i<lng.length;i++)
852 lng[i]=Long.parseLong(stringArray[i]);
853 return lng;
854 }
855 case CHAR:{
856 char[] chr = new char[stringArray.length];
857 for(int i=0;i<chr.length;i++)
858 chr[i]=stringArray[i].charAt(0);
859 return chr;
860 }
861 case STRING:{
862 return extendedDataTextField.getText();
863 }
864 default: return null;
865 }
866 } catch (Exception e) {
867 return null;
868 }
869 }
870
871 private void updateArraySizeCombo(ConnectionParameters param) {
872 String[] elements = arraySizeModel.getElements();
873 if (param == null) {
874 for (int i = 0; i < elements.length; i++) {
875 if (elements[i].startsWith(ACTUAL)) {
876 arraySizeModel.replaceElement(i, ACTUAL);
877 return;
878 }
879 }
880 } else {
881 for (int i = 0; i < elements.length; i++) {
882 if (elements[i].startsWith(ACTUAL)) {
883 arraySizeModel.replaceElement(i, ACTUAL + " (" + getActualSize(param) + ")");
884 return;
885 }
886 }
887 }
888 }
889
890 private void refreshSelectionLabel() {
891 applySettings();
892 String text = connectionParameters.toString();
893 getSelectionLabel().setText(text);
894 getSelectionLabel().setToolTipText(text);
895 }
896
897 private void update(final ConnectionParameters params) {
898 if (params == null || params.equals(connectionParameters)) return;
899 ConnectionParameters old = connectionParameters;
900 connectionParameters = params;
901 getExecutorService().execute(new Runnable() {
902 public void run() {
903 getSelector().setSelectedProtocol(params.getAccessProtocol());
904 getSelector().setSelectedContext(params.getDeviceContext());
905 getSelector().setSelectedServer(params.getDeviceGroup());
906 getSelector().setSelectedDevice(params.getDeviceName());
907 getSelector().setSelectedProperty(params.getDeviceProperty());
908
909 getSelector().setSelectedDevice(params.getDeviceName());
910 getSelector().setAccessMode(params.getAccessMode());
911 getSelector().setAccessRate(params.getAccessRate());
912 }
913 });
914
915 int size = params.getPropertySize();
916 if (size == -1) {
917 getArraySizeCombo().setSelectedItem(AUTO);
918 } else if (size == 0){
919 String o = ACTUAL;
920 for (String s :arraySizeModel.getElements()) {
921 if (s.startsWith(ACTUAL)) {
922 o = s;
923 }
924 }
925 getArraySizeCombo().setSelectedItem(o);
926 } else {
927 getArraySizeCombo().setSelectedItem(String.valueOf(size));
928 }
929
930 if (SelectorUtilities.isConnectionParametersValid(connectionParameters)) {
931 getExecutorService().execute(new Runnable() {
932 public void run() {
933 String text = SelectorUtilities.getInfo(connectionParameters);
934 getDescriptionLabel().setText(text);
935 getDescriptionLabel().setToolTipText(text);
936 updateArraySizeCombo(connectionParameters);
937 }
938 });
939 }
940
941 firePropertyChange(ConnectionParametersReceiver.CONNECTION_PARAMETERS_PROPERTY,old,connectionParameters);
942 }
943
944
945
946
947
948 public void setObject(Object bean) {
949 if (bean instanceof MultipleAcopDisplayer<?>) {
950 disp = bean;
951 } else if (bean instanceof ConnectionParametersReceiver) {
952 disp = bean;
953 update(((ConnectionParametersReceiver)disp).getConnectionParameters());
954 ((ConnectionParametersReceiver)disp).addPropertyChangeListener(ConnectionParametersReceiver.CONNECTION_PARAMETERS_PROPERTY, new PropertyChangeListener(){
955
956 public void propertyChange(PropertyChangeEvent evt) {
957 if (!ConnectionParametersReceiver.CONNECTION_PARAMETERS_PROPERTY.equals(evt.getPropertyName())) return;
958 update(((ConnectionParametersReceiver)disp).getConnectionParameters());
959 }
960
961 });
962 } else {
963 throw new IllegalArgumentException("Only ConnectionParametersReceiver and" +
964 " MultipleAcopDisplayer can use this Customizer.");
965 }
966
967
968 }
969
970
971
972
973
974
975 public ConnectionParameters getConnectionParameters() {
976 return connectionParameters;
977 }
978
979
980
981
982
983
984 public void setConnectionParameters(ConnectionParameters parameters) {
985 if (this.connectionParameters != null && this.connectionParameters.equals(parameters)) return;
986 update(parameters);
987 }
988
989 protected void setSelector(Selector selector) {
990 if (this.selector != null && this.selector.equals(selector)) return;
991 if (this.selector != null) {
992 this.selector.removePropertyChangeListener(getSelectorPropertyListener());
993 this.selector.removeQueryListener(getSelectorQueryListener());
994 this.selector.removeExceptionListener(getExceptionListener());
995 }
996 Selector old = this.selector;
997 this.selector = selector;
998 if (this.selector != null) {
999 this.selector.addPropertyChangeListener(getSelectorPropertyListener());
1000 this.selector.addQueryListener(getSelectorQueryListener());
1001 this.selector.addExceptionListener(getExceptionListener());
1002 }
1003 getListSelector().setSelector(selector);
1004
1005 getExecutorService().execute(new Runnable() {
1006 public void run() {
1007 SelectorGUI.this.selector.setSelectedProtocol(Selector.PROTOCOL_TINE);
1008 fillAndSelectValue();
1009 refreshSelectionLabel();
1010 }
1011 });
1012
1013
1014 firePropertyChange("selector", old, this.selector);
1015 }
1016
1017 protected Selector getSelector() {
1018 return selector;
1019 }
1020
1021 private ExceptionListener getExceptionListener() {
1022 if (exceptionListener == null) {
1023 exceptionListener = new ExceptionListener() {
1024 public void exceptionReceived(ExceptionEvent e) {
1025 handleException(e.getThrowable());
1026 }
1027 };
1028 }
1029 return exceptionListener;
1030 }
1031
1032 protected void handleException(Throwable e) {
1033 if (Beans.isDesignTime()) {
1034 getSpiderBean().addError(e);
1035 } else {
1036 e.printStackTrace();
1037 }
1038 }
1039
1040 private AcopSpider getSpiderBean() {
1041 if (spiderBean == null) {
1042 spiderBean = new AcopSpider();
1043 spiderBean.setAutoResize(false);
1044 spiderBean.setSize(new Dimension(30,30));
1045 spiderBean.setMaximumSize(new Dimension(30,30));
1046 spiderBean.setMinimumSize(new Dimension(30,30));
1047 spiderBean.setPreferredSize(new Dimension(30,30));
1048 spiderBean.setSize(new Dimension(30,30));
1049 spiderBean.rescaleIconToFit();
1050 }
1051 return spiderBean;
1052 }
1053
1054 private PropertyChangeListener getSelectorPropertyListener() {
1055 if (selectorPropertyListener == null) {
1056 selectorPropertyListener = new PropertyChangeListener(){
1057 public void propertyChange(PropertyChangeEvent evt) {
1058 if (getSelector() == null) return;
1059 if (!getPropertyNameCombo().isEnabled()) return;
1060 final String name = evt.getPropertyName();
1061 if ("accessRate".equals(name)) {
1062 getAccessRateField().setValue(getSelector().getAccessRate());
1063 refreshSelectionLabel();
1064 getAccessRateField().requestFocus();
1065 return;
1066 } else if ("accessMode".equals(name)) {
1067 getAccessModeCombo().setSelectedItem(getSelector().getAccessMode());
1068 refreshSelectionLabel();
1069 getAccessModeCombo().requestFocus();
1070 return;
1071 }
1072
1073 if ("selectedProtocol".equals(name)) {
1074 accessProtocolModel.setSelectedItem(getSelector().getSelectedProtocol());
1075 } else if ("selectedContext".equals(name)) {
1076 deviceContextModel.setSelectedItem(getSelector().getSelectedContext());
1077 } else if ("selectedSubSystem".equals(name)) {
1078 subSystemModel.setSelectedItem(getSelector().getSelectedSubSystem());
1079 } else if ("selectedServer".equals(name)) {
1080 deviceServerModel.setSelectedItem(getSelector().getSelectedServer());
1081 } else if ("selectedDevice".equals(name)) {
1082 deviceNameModel.setSelectedItem(getSelector().getSelectedDevice());
1083 } else if ("selectedProperty".equals(name)) {
1084 propertyNameModel.setSelectedItem(getSelector().getSelectedProperty());
1085 } else if ("availableContexts".equals(name)) {
1086 deviceContextModel.setElements(getSelector().getAvailableContexts());
1087 } else if ("availableSubsystems".equals(name)) {
1088 subSystemModel.setElements(getSelector().getAvailableSubsystems());
1089 } else if ("availableServers".equals(name)) {
1090 deviceServerModel.setElements(getSelector().getAvailableServers());
1091 } else if ("availableDevices".equals(name)) {
1092 deviceNameModel.setElements(getSelector().getAvailableDevices());
1093 } else if ("availableProperties".equals(name)) {
1094 propertyNameModel.setElements(getSelector().getAvailableProperties());
1095 } else if ("showStockProperties".equals(name)) {
1096 getShowStockPropertiesCheckBox().setSelected(getSelector().isShowStockProperties());
1097 }
1098 refreshSelectionLabel();
1099
1100 if (!Beans.isDesignTime()) {
1101 if ("selectedProperty".equals(evt.getPropertyName())) {
1102 if (evt.getNewValue() == null) {
1103 getDescriptionLabel().setText("");
1104 getDescriptionLabel().setToolTipText("");
1105 return;
1106 }
1107 if (evt.getNewValue() != evt.getOldValue()) {
1108 if (SelectorUtilities.isConnectionParametersValid(connectionParameters)) {
1109 String text = SelectorUtilities.getInfo(connectionParameters);
1110 getDescriptionLabel().setText(text);
1111 getDescriptionLabel().setToolTipText(text);
1112 updateArraySizeCombo(connectionParameters);
1113 }
1114 }
1115 }
1116 }
1117
1118 }
1119 };
1120 }
1121 return selectorPropertyListener;
1122 }
1123
1124 private void fillAndSelectValue() {
1125 settingFromSelector = true;
1126 getShowStockPropertiesCheckBox().setSelected(getSelector().isShowStockProperties());
1127 accessProtocolModel.setSelectedItem(getSelector().getSelectedProtocol());
1128 deviceContextModel.setElements(getSelector().getAvailableContexts());
1129 deviceContextModel.setSelectedItem(getSelector().getSelectedContext());
1130 subSystemModel.setElements(getSelector().getAvailableSubsystems());
1131 subSystemModel.setSelectedItem(getSelector().getSelectedSubSystem());
1132 deviceServerModel.setElements(getSelector().getAvailableServers());
1133 deviceServerModel.setSelectedItem(getSelector().getSelectedServer());
1134 deviceNameModel.setElements(getSelector().getAvailableDevices());
1135 deviceNameModel.setSelectedItem(getSelector().getSelectedDevice());
1136 propertyNameModel.setElements(getSelector().getAvailableProperties());
1137 propertyNameModel.setSelectedItem(getSelector().getSelectedProperty());
1138 getAccessRateField().setValue(getSelector().getAccessRate());
1139 getAccessModeCombo().setSelectedItem(getSelector().getAccessMode());
1140 settingFromSelector = false;
1141 }
1142
1143 private QueryListener getSelectorQueryListener() {
1144 if (selectorQueryListener == null) {
1145 selectorQueryListener = new QueryListener() {
1146 public void queryFinished(QueryEvent e) {
1147 if (getSelector() == null) return;
1148 synchronized(selector) {
1149 fillAndSelectValue();
1150 refreshSelectionLabel();
1151 setCombosEnabled(true);
1152 if (SelectorUtilities.isConnectionParametersValid(connectionParameters)) {
1153 String text = SelectorUtilities.getInfo(connectionParameters);
1154 getDescriptionLabel().setText(text);
1155 getDescriptionLabel().setToolTipText(text);
1156 updateArraySizeCombo(connectionParameters);
1157 } else {
1158 getDescriptionLabel().setText("");
1159 getDescriptionLabel().setToolTipText("");
1160 updateArraySizeCombo(null);
1161 }
1162 }
1163 }
1164 public void queryStarted(QueryEvent e) {
1165 if (getSelector() == null) return;
1166 synchronized (selector) {
1167 setCombosEnabled(false);
1168 }
1169
1170 }
1171 };
1172 }
1173 return selectorQueryListener;
1174 }
1175
1176 private boolean combosEnabled = true;
1177 private void setCombosEnabled(boolean enabled) {
1178
1179 if (enabled && getSelector().isBusy()) {
1180 enabled = false;
1181 }
1182 if (this.combosEnabled == enabled) return;
1183 this.combosEnabled = enabled;
1184 SwingUtilities.invokeLater(new Runnable() {
1185
1186 @Override
1187 public void run() {
1188 getAccessProtocolCombo().setEnabled(combosEnabled);
1189 getDeviceContextCombo().setEnabled(combosEnabled);
1190 getSubSystemCombo().setEnabled(combosEnabled);
1191 getDeviceServerCombo().setEnabled(combosEnabled);
1192 getDeviceNameCombo().setEnabled(combosEnabled);
1193 getPropertyNameCombo().setEnabled(combosEnabled);
1194
1195 }
1196 });
1197
1198 }
1199
1200
1201
1202
1203
1204
1205 public void addSelectorGUIListener(SelectorGUIListener l) {
1206 selectorGUIListeners.add(l);
1207 }
1208
1209
1210
1211
1212
1213
1214 public void removeSelectorGUIListener(SelectorGUIListener l) {
1215 selectorGUIListeners.remove(l);
1216 }
1217
1218 protected void fireSelectorGUIEvent(boolean selectionComplete) {
1219 SelectorGUIListener[] listeners = (SelectorGUIListener[]) selectorGUIListeners.toArray();
1220 SelectorGUIEvent e = new SelectorGUIEvent(this, selectionComplete);
1221 for (SelectorGUIListener listener : listeners) {
1222 listener.selectionChanged(e);
1223 }
1224 }
1225
1226 private int getActualSize(ConnectionParameters param) {
1227 return SelectorUtilities.getSequenceLength(param);
1228 }
1229
1230 private JButton getAdvancedSelectorButton() {
1231 if (advancedSelectorButton == null) {
1232 advancedSelectorButton = new JButton("Advanced browsing",IconHelper.createIcon("icons/navigation/ArrowRightRight16.gif"));
1233 advancedSelectorButton.addActionListener(new ActionListener(){
1234 public void actionPerformed(ActionEvent e) {
1235 getAdvancedSelector().setVisible(true);
1236 }
1237 });
1238 }
1239 return advancedSelectorButton;
1240 }
1241
1242 private JDialog getAdvancedSelector() {
1243 if (advancedSelectorDialog == null) {
1244 advancedSelectorDialog = new JDialog();
1245 advancedSelectorDialog.setSize(800,600);
1246 ComponentPositioner.centerOnScreen(advancedSelectorDialog);
1247 advancedSelectorDialog.setTitle("Advanced browsing");
1248 advancedSelectorDialog.setContentPane(getListSelector());
1249 advancedSelectorDialog.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
1250
1251 }
1252 return advancedSelectorDialog;
1253 }
1254
1255 private SelectorListGUI getListSelector() {
1256 if (listSelector == null) {
1257 listSelector = new SelectorListGUI();
1258 listSelector.setSelector(selector);
1259 listSelector.setExecutorService(getExecutorService());
1260 }
1261 return listSelector;
1262 }
1263
1264 public static void main(String[] args) {
1265 try {
1266
1267 SelectorGUI c= new SelectorGUI();
1268 RunnerHelper.runComponent(c,300,370);
1269 } catch (Exception e) {
1270 e.printStackTrace();
1271 }
1272
1273 }
1274
1275 private ThreadPoolExecutor executorService;
1276 private ThreadPoolExecutor getExecutorService() {
1277 if (executorService == null) {
1278 executorService = new ThreadPoolExecutor(1, 1, 0, TimeUnit.NANOSECONDS,
1279 new LinkedBlockingQueue<Runnable>()){
1280 @Override
1281 protected void afterExecute(Runnable r, Throwable t) {
1282 super.afterExecute(r, t);
1283 if (t != null) {
1284 t.printStackTrace();
1285 }
1286 }
1287 };
1288 executorService.setRejectedExecutionHandler(new RejectedExecutionHandler(){
1289 public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
1290
1291 }
1292 });
1293
1294
1295 }
1296 return executorService;
1297 }
1298
1299
1300
1301
1302
1303
1304
1305 public void setOnlyConnectionParametersMode(boolean onlyCP) {
1306 this.onlyConnectionParametersMode = onlyCP;
1307 arraySizeLabel.setVisible(!onlyConnectionParametersMode);
1308 getArraySizeCombo().setVisible(!onlyConnectionParametersMode);
1309 }
1310
1311
1312
1313
1314
1315 public boolean getOnlyConnectionParametersMode() {
1316 return this.onlyConnectionParametersMode;
1317 }
1318
1319 }
1320