Mercurial > illumos > onarm
comparison usr/src/cmd/cmd-inet/usr.sadm/dhcpmgr/com/sun/dhcpmgr/client/CreateMacroDialog.java @ 0:c9caec207d52 b86
Initial porting based on b86
author | Koji Uno <koji.uno@sun.com> |
---|---|
date | Tue, 02 Jun 2009 18:56:50 +0900 |
parents | |
children | 1a15d5aaf794 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:c9caec207d52 |
---|---|
1 /* | |
2 * CDDL HEADER START | |
3 * | |
4 * The contents of this file are subject to the terms of the | |
5 * Common Development and Distribution License, Version 1.0 only | |
6 * (the "License"). You may not use this file except in compliance | |
7 * with the License. | |
8 * | |
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE | |
10 * or http://www.opensolaris.org/os/licensing. | |
11 * See the License for the specific language governing permissions | |
12 * and limitations under the License. | |
13 * | |
14 * When distributing Covered Code, include this CDDL HEADER in each | |
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. | |
16 * If applicable, add the following below this CDDL HEADER, with the | |
17 * fields enclosed by brackets "[]" replaced with your own identifying | |
18 * information: Portions Copyright [yyyy] [name of copyright owner] | |
19 * | |
20 * CDDL HEADER END | |
21 */ | |
22 /* | |
23 * ident "@(#)CreateMacroDialog.java 1.18 05/06/08 SMI" | |
24 * | |
25 * Copyright 2003 Sun Microsystems, Inc. All rights reserved. | |
26 * Use is subject to license terms. | |
27 */ | |
28 package com.sun.dhcpmgr.client; | |
29 | |
30 import javax.swing.*; | |
31 import javax.swing.border.*; | |
32 import javax.swing.event.*; | |
33 import javax.swing.table.*; | |
34 | |
35 import java.awt.*; | |
36 import java.awt.event.*; | |
37 import java.text.MessageFormat; | |
38 import java.util.*; | |
39 | |
40 import com.sun.dhcpmgr.server.*; | |
41 import com.sun.dhcpmgr.data.*; | |
42 import com.sun.dhcpmgr.ui.*; | |
43 import com.sun.dhcpmgr.bridge.NotRunningException; | |
44 | |
45 /** | |
46 * Dialog to create/duplicate/edit a macro. | |
47 */ | |
48 public class CreateMacroDialog extends JDialog implements ButtonPanelListener { | |
49 | |
50 // Model for the table that displays the macro's contents | |
51 class MacroTableModel extends AbstractTableModel { | |
52 Macro macro; | |
53 | |
54 public MacroTableModel() { | |
55 setMacro(new Macro()); | |
56 } | |
57 | |
58 public MacroTableModel(Macro m) { | |
59 super(); | |
60 setMacro(m); | |
61 } | |
62 | |
63 public void setMacro(Macro m) { | |
64 macro = m; | |
65 fireTableDataChanged(); | |
66 } | |
67 | |
68 public int getRowCount() { | |
69 return macro.optionCount(); | |
70 } | |
71 | |
72 public int getColumnCount() { | |
73 return 2; | |
74 } | |
75 | |
76 public Object getValueAt(int row, int column) { | |
77 OptionValue v = null; | |
78 try { | |
79 v = macro.getOptionAt(row); | |
80 } catch (ArrayIndexOutOfBoundsException e) { | |
81 return null; | |
82 } | |
83 if (v == null) { | |
84 return null; | |
85 } | |
86 switch (column) { | |
87 case 0: | |
88 return v.getName(); | |
89 case 1: | |
90 return v.getValue(); | |
91 default: | |
92 return null; | |
93 } | |
94 } | |
95 | |
96 public Class getColumnClass(int column) { | |
97 switch (column) { | |
98 case 0: | |
99 case 1: | |
100 return String.class; | |
101 default: | |
102 return super.getColumnClass(column); | |
103 } | |
104 } | |
105 | |
106 public String getColumnName(int column) { | |
107 switch (column) { | |
108 case 0: | |
109 return ResourceStrings.getString("option_column"); | |
110 case 1: | |
111 return ResourceStrings.getString("value_column"); | |
112 default: | |
113 super.getColumnName(column); | |
114 } | |
115 return null; | |
116 } | |
117 | |
118 public boolean isCellEditable(int row, int column) { | |
119 return false; | |
120 } | |
121 | |
122 public void moveRowUp(int row) { | |
123 OptionValue v = macro.getOptionAt(row); | |
124 macro.deleteOptionAt(row); | |
125 macro.insertOptionAt(v, row-1); | |
126 fireTableRowsUpdated(row-1, row); | |
127 } | |
128 | |
129 public void moveRowDown(int row) { | |
130 OptionValue v = macro.getOptionAt(row); | |
131 macro.deleteOptionAt(row); | |
132 macro.insertOptionAt(v, row+1); | |
133 fireTableRowsUpdated(row, row+1); | |
134 } | |
135 | |
136 public void deleteRow(int row) { | |
137 macro.deleteOptionAt(row); | |
138 fireTableRowsDeleted(row, row); | |
139 } | |
140 | |
141 public void setOptionAt(OptionValue v, int row) { | |
142 macro.setOptionAt(v, row); | |
143 fireTableDataChanged(); | |
144 } | |
145 | |
146 public int findRowForOption(String opt) { | |
147 for (int i = 0; i < getRowCount(); ++i) { | |
148 OptionValue v = macro.getOptionAt(i); | |
149 if (opt.equals(v.getName())) { | |
150 return i; | |
151 } | |
152 } | |
153 return -1; | |
154 } | |
155 } | |
156 | |
157 public static final int CREATE = 0; | |
158 public static final int EDIT = 1; | |
159 public static final int DUPLICATE = 2; | |
160 | |
161 private int mode = CREATE; | |
162 private Macro originalMacro = null; | |
163 private MacroNameField name; | |
164 private JTextField optionName; | |
165 private JTextField optionValue; | |
166 private AutosizingTable macroTable; | |
167 private MacroTableModel macroTableModel; | |
168 private ButtonPanel buttonPanel; | |
169 private JButton deleteButton, addButton, modifyButton, selectButton; | |
170 private UpButton upButton; | |
171 private DownButton downButton; | |
172 private JCheckBox signalBox; | |
173 private Vector listeners; | |
174 private String savedOptionName = ""; | |
175 | |
176 /* | |
177 * Listener for the editing buttons which are used to manipulate the | |
178 * table's contents | |
179 */ | |
180 ActionListener listener = new ActionListener() { | |
181 public void actionPerformed(ActionEvent e) { | |
182 int row = macroTable.getSelectedRow(); | |
183 int lastRow = macroTable.getRowCount() - 1; | |
184 | |
185 Object src = e.getSource(); | |
186 if (src == upButton) { | |
187 if (row == 0) { | |
188 return; // Can't move the first row up | |
189 } | |
190 macroTableModel.moveRowUp(row); | |
191 /* | |
192 * Keep the row we moved selected so that repeated move up's | |
193 * affect the same data | |
194 */ | |
195 macroTable.clearSelection(); | |
196 macroTable.addRowSelectionInterval(row-1, row-1); | |
197 } else if (src == downButton) { | |
198 if (row == lastRow) { | |
199 return; // Can't move the last row down | |
200 } | |
201 macroTableModel.moveRowDown(row); | |
202 /* | |
203 * Keep the row we moved selected so that repeated move down's | |
204 * affect the same data | |
205 */ | |
206 macroTable.clearSelection(); | |
207 macroTable.addRowSelectionInterval(row+1, row+1); | |
208 } else if (src == deleteButton) { | |
209 macroTableModel.deleteRow(row); | |
210 /* | |
211 * Keep the same row selected so that repeated delete presses | |
212 * can be used to delete a series of options | |
213 */ | |
214 macroTable.clearSelection(); | |
215 if (row == lastRow) { | |
216 row = macroTableModel.getRowCount()-1; | |
217 } | |
218 if (macroTableModel.getRowCount() > 0) { | |
219 macroTable.addRowSelectionInterval(row, row); | |
220 } | |
221 if (macroTableModel.getRowCount() <= 0) { | |
222 modifyButton.setEnabled(false); | |
223 } | |
224 } else if (src == selectButton) { | |
225 // Show dialog that allows selection of options | |
226 String s = SelectOptionDialog.showDialog(selectButton); | |
227 | |
228 /* | |
229 * User selected something, put it in the name field | |
230 * set the focus to the value field | |
231 */ | |
232 if (s != null) { | |
233 optionName.setText(s); | |
234 optionValue.requestFocus(); | |
235 } | |
236 } else if ((src == addButton) || (src == modifyButton)) { | |
237 // Update the table from the field contents | |
238 OptionValue v = null; | |
239 v = OptionValueFactory.newOptionValue(optionName.getText()); | |
240 if (v instanceof BogusOptionValue) { | |
241 optionName.requestFocus(); | |
242 // bad option name | |
243 MessageFormat form = null; | |
244 Object [] args = new Object[1]; | |
245 args[0] = optionName.getText(); | |
246 form = new MessageFormat( | |
247 ResourceStrings.getString("bad_option_name")); | |
248 JOptionPane.showMessageDialog(macroTable, form.format(args), | |
249 ResourceStrings.getString("input_error"), | |
250 JOptionPane.ERROR_MESSAGE); | |
251 return; | |
252 } | |
253 try { | |
254 /* | |
255 * Catch an empty value field, which is only legal for | |
256 * a boolean option | |
257 */ | |
258 String s = optionValue.getText(); | |
259 if (s.length() == 0 && !(v instanceof BooleanOptionValue)) { | |
260 throw new ValidationException(); | |
261 } | |
262 v.setValue(s); | |
263 } catch (ValidationException ex) { | |
264 // bad option value | |
265 optionValue.requestFocus(); | |
266 MessageFormat form = null; | |
267 Object [] args = new Object[2]; | |
268 form = new MessageFormat( | |
269 ResourceStrings.getString("bad_option_value")); | |
270 args[0] = optionValue.getText(); | |
271 args[1] = optionName.getText(); | |
272 JOptionPane.showMessageDialog(macroTable, form.format(args), | |
273 ResourceStrings.getString("input_error"), | |
274 JOptionPane.ERROR_MESSAGE); | |
275 return; | |
276 } | |
277 /* | |
278 * Don't allow a second instance of any option other than | |
279 * Include in a macro, but only check if we're doing an add | |
280 * or if it's a modify and the name has changed. | |
281 */ | |
282 if ((!(v instanceof IncludeOptionValue) | |
283 && (src == addButton)) | |
284 || ((src == modifyButton) | |
285 && !savedOptionName.equals(v.getName()))) { | |
286 if (macroTableModel.macro.getOption(v.getName()) != null) { | |
287 optionName.requestFocus(); | |
288 MessageFormat form = new MessageFormat( | |
289 ResourceStrings.getString("macro_contains_option")); | |
290 Object [] args = new Object[1]; | |
291 args[0] = v.getName(); | |
292 JOptionPane.showMessageDialog(macroTable, | |
293 form.format(args), | |
294 ResourceStrings.getString("input_error"), | |
295 JOptionPane.ERROR_MESSAGE); | |
296 return; | |
297 } | |
298 } | |
299 // If adding, append it at the end | |
300 if (src == addButton) { | |
301 row = macroTableModel.getRowCount(); | |
302 } | |
303 macroTableModel.setOptionAt(v, row); | |
304 macroTable.clearSelection(); | |
305 macroTable.addRowSelectionInterval(row, row); | |
306 macroTable.scrollRectToVisible( | |
307 macroTable.getCellRect(row, 0, false)); | |
308 } | |
309 } | |
310 }; | |
311 | |
312 public CreateMacroDialog(Frame f, int mode) { | |
313 super(f); | |
314 setLocationRelativeTo(f); | |
315 | |
316 listeners = new Vector(); | |
317 | |
318 this.mode = mode; | |
319 switch (mode) { | |
320 case CREATE: | |
321 setTitle(ResourceStrings.getString("create_macro_title")); | |
322 break; | |
323 case EDIT: | |
324 setTitle(ResourceStrings.getString("edit_macro_title")); | |
325 break; | |
326 case DUPLICATE: | |
327 setTitle(ResourceStrings.getString("duplicate_macro_title")); | |
328 break; | |
329 default: | |
330 break; | |
331 } | |
332 | |
333 getContentPane().setLayout(new BoxLayout(getContentPane(), | |
334 BoxLayout.Y_AXIS)); | |
335 JPanel mainPanel = new JPanel(new BorderLayout()); | |
336 mainPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); | |
337 | |
338 // Name cannot have blanks in it so use a control which disallows them | |
339 name = new MacroNameField("", 30); | |
340 JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT)); | |
341 | |
342 Mnemonic mnName = | |
343 new Mnemonic(ResourceStrings.getString("md_name_label")); | |
344 JLabel nameLbl = new JLabel(mnName.getString()); | |
345 nameLbl.setLabelFor(name); | |
346 nameLbl.setToolTipText(mnName.getString()); | |
347 nameLbl.setDisplayedMnemonic(mnName.getMnemonic()); | |
348 panel.add(nameLbl); | |
349 | |
350 panel.add(name); | |
351 mainPanel.add(panel, BorderLayout.NORTH); | |
352 | |
353 JPanel contentsPanel = new JPanel(); | |
354 contentsPanel.setLayout(new BorderLayout()); | |
355 // Put a titled border on the contents panel | |
356 Border b = BorderFactory.createCompoundBorder( | |
357 BorderFactory.createLineBorder(Color.black), | |
358 BorderFactory.createEmptyBorder(5, 10, 5, 10)); | |
359 contentsPanel.setBorder(BorderFactory.createTitledBorder(b, | |
360 ResourceStrings.getString("contents_label"))); | |
361 | |
362 /* | |
363 * Create a panel using a couple of text fields to edit the options | |
364 * included in the macro | |
365 */ | |
366 JPanel fieldPanel = new JPanel(new FieldLayout()); | |
367 // Field for option name | |
368 | |
369 panel = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 0)); | |
370 optionName = new JTextField("", 20); | |
371 Mnemonic mnOptName = | |
372 new Mnemonic(ResourceStrings.getString("md_option_name")); | |
373 JLabel optNameLbl = | |
374 new JLabel(mnOptName.getString()); | |
375 fieldPanel.add(FieldLayout.LABEL, optNameLbl); | |
376 optNameLbl.setLabelFor(optionName); | |
377 optNameLbl.setToolTipText(mnOptName.getString()); | |
378 optNameLbl.setDisplayedMnemonic(mnOptName.getMnemonic()); | |
379 | |
380 panel.add(optionName); | |
381 panel.add(Box.createHorizontalStrut(5)); | |
382 | |
383 Mnemonic mnSelect = | |
384 new Mnemonic(ResourceStrings.getString("select")); | |
385 selectButton = new JButton(mnSelect.getString()); | |
386 selectButton.setToolTipText(mnSelect.getString()); | |
387 selectButton.setMnemonic(mnSelect.getMnemonic()); | |
388 | |
389 selectButton.addActionListener(listener); | |
390 panel.add(selectButton); | |
391 fieldPanel.add(FieldLayout.FIELD, panel); | |
392 | |
393 // Field for option value | |
394 | |
395 optionValue = new JTextField(); | |
396 | |
397 Mnemonic mnOptVal = | |
398 new Mnemonic(ResourceStrings.getString("md_option_value")); | |
399 JLabel optValLbl = new JLabel(mnOptVal.getString()); | |
400 fieldPanel.add(FieldLayout.LABEL, optValLbl); | |
401 optValLbl.setLabelFor(optionValue); | |
402 optValLbl.setToolTipText(mnOptVal.getString()); | |
403 optValLbl.setDisplayedMnemonic(mnOptVal.getMnemonic()); | |
404 | |
405 fieldPanel.add(FieldLayout.FIELD, optionValue); | |
406 | |
407 // Buttons for add/modify | |
408 | |
409 Mnemonic mnAdd = | |
410 new Mnemonic(ResourceStrings.getString("add")); | |
411 addButton = new JButton(mnAdd.getString()); | |
412 addButton.setToolTipText(mnAdd.getString()); | |
413 addButton.setMnemonic(mnAdd.getMnemonic()); | |
414 | |
415 addButton.addActionListener(listener); | |
416 addButton.setEnabled(false); | |
417 | |
418 Mnemonic mnModify = | |
419 new Mnemonic(ResourceStrings.getString("modify")); | |
420 modifyButton = new JButton(mnModify.getString()); | |
421 modifyButton.setToolTipText(mnModify.getString()); | |
422 modifyButton.setMnemonic(mnModify.getMnemonic()); | |
423 | |
424 modifyButton.addActionListener(listener); | |
425 modifyButton.setEnabled(false); | |
426 panel = new JPanel(new VerticalButtonLayout()); | |
427 panel.add(addButton); | |
428 panel.add(modifyButton); | |
429 | |
430 JPanel editPanel = new JPanel(new BorderLayout()); | |
431 editPanel.add(fieldPanel, BorderLayout.WEST); | |
432 editPanel.add(panel, BorderLayout.EAST); | |
433 contentsPanel.add(editPanel, BorderLayout.NORTH); | |
434 | |
435 // Use a table to display the contents of the macro | |
436 macroTableModel = new MacroTableModel(); | |
437 macroTable = new AutosizingTable(macroTableModel); | |
438 macroTable.getTableHeader().setReorderingAllowed(false); | |
439 macroTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); | |
440 JScrollPane macroTablePane = new JScrollPane(macroTable); | |
441 // Resize table as otherwise it asks for a huge area | |
442 Dimension d = macroTable.getPreferredScrollableViewportSize(); | |
443 d.height = 100; | |
444 d.width = 300; | |
445 macroTable.setPreferredScrollableViewportSize(d); | |
446 | |
447 contentsPanel.add(macroTablePane, BorderLayout.CENTER); | |
448 | |
449 // Create buttons for controlling table | |
450 JPanel editButtonPanel = new JPanel(new VerticalButtonLayout()); | |
451 | |
452 upButton = new UpButton(); | |
453 upButton.setEnabled(false); | |
454 upButton.addActionListener(listener); | |
455 editButtonPanel.add(upButton); | |
456 | |
457 downButton = new DownButton(); | |
458 downButton.setEnabled(false); | |
459 downButton.addActionListener(listener); | |
460 editButtonPanel.add(downButton); | |
461 | |
462 Mnemonic mnDelete = | |
463 new Mnemonic(ResourceStrings.getString("delete")); | |
464 deleteButton = new JButton(mnDelete.getString()); | |
465 deleteButton.setToolTipText(mnDelete.getString()); | |
466 deleteButton.setMnemonic(mnDelete.getMnemonic()); | |
467 | |
468 deleteButton.setEnabled(false); | |
469 deleteButton.addActionListener(listener); | |
470 editButtonPanel.add(deleteButton); | |
471 contentsPanel.add(editButtonPanel, BorderLayout.EAST); | |
472 | |
473 mainPanel.add(contentsPanel, BorderLayout.CENTER); | |
474 | |
475 signalBox = new JCheckBox(ResourceStrings.getString("signal_server"), | |
476 true); | |
477 signalBox.setToolTipText( | |
478 ResourceStrings.getString("signal_server")); | |
479 signalBox.setHorizontalAlignment(SwingConstants.CENTER); | |
480 mainPanel.add(signalBox, BorderLayout.SOUTH); | |
481 | |
482 getContentPane().add(mainPanel); | |
483 getContentPane().add(new JSeparator()); | |
484 | |
485 buttonPanel = new ButtonPanel(true); | |
486 buttonPanel.addButtonPanelListener(this); | |
487 getContentPane().add(buttonPanel); | |
488 | |
489 // Listen to table selection state and set state of buttons accordingly | |
490 macroTable.getSelectionModel().addListSelectionListener( | |
491 new ListSelectionListener() { | |
492 public void valueChanged(ListSelectionEvent e) { | |
493 int index = macroTable.getSelectedRow(); | |
494 if (index == -1) { | |
495 // Nothing selected, disable all | |
496 upButton.setEnabled(false); | |
497 downButton.setEnabled(false); | |
498 deleteButton.setEnabled(false); | |
499 // Clear the option name we saved | |
500 savedOptionName = ""; | |
501 } else { | |
502 if (macroTable.getRowCount() > 0) { | |
503 /* | |
504 * Only allow deleteButton to be activated when | |
505 * the table is not empty regardless of selection | |
506 * method, mouse or keyboard | |
507 */ | |
508 deleteButton.setEnabled(true); | |
509 } | |
510 if (index == 0) { | |
511 // First row can't move up | |
512 upButton.setEnabled(false); | |
513 } else { | |
514 upButton.setEnabled(true); | |
515 } | |
516 if (index == (macroTable.getRowCount() - 1)) { | |
517 // Last row can't move down | |
518 downButton.setEnabled(false); | |
519 } else { | |
520 if (macroTable.getRowCount() > 0) { | |
521 /* | |
522 * Only allow downButton to be activated when the | |
523 * table is not empty regardless of selection | |
524 * method, mouse or keyboard | |
525 */ | |
526 downButton.setEnabled(true); | |
527 } | |
528 } | |
529 // Save editing name so we can detect name change | |
530 savedOptionName = | |
531 (String)macroTableModel.getValueAt(index, 0); | |
532 optionName.setText(savedOptionName); | |
533 optionValue.setText( | |
534 (String)macroTableModel.getValueAt(index, 1)); | |
535 } | |
536 } | |
537 }); | |
538 | |
539 // Only enable OK if the name is not empty | |
540 name.getDocument().addDocumentListener(new DocumentListener() { | |
541 public void insertUpdate(DocumentEvent e) { | |
542 buttonPanel.setOkEnabled(e.getDocument().getLength() != 0); | |
543 } | |
544 public void changedUpdate(DocumentEvent e) { | |
545 insertUpdate(e); | |
546 } | |
547 public void removeUpdate(DocumentEvent e) { | |
548 insertUpdate(e); | |
549 } | |
550 }); | |
551 | |
552 // Only enable add/modify when option name is non-empty | |
553 optionName.getDocument().addDocumentListener(new DocumentListener() { | |
554 public void insertUpdate(DocumentEvent e) { | |
555 boolean state = (optionName.getDocument().getLength() != 0); | |
556 addButton.setEnabled(state); | |
557 if (state == false) { | |
558 modifyButton.setEnabled(state); | |
559 } else if (macroTable.getSelectedRowCount() > 0) { | |
560 modifyButton.setEnabled(state); | |
561 } | |
562 } | |
563 public void changedUpdate(DocumentEvent e) { | |
564 insertUpdate(e); | |
565 } | |
566 public void removeUpdate(DocumentEvent e) { | |
567 insertUpdate(e); | |
568 } | |
569 }); | |
570 | |
571 if (mode == EDIT) { | |
572 buttonPanel.setOkEnabled(true); | |
573 } | |
574 setMacro(new Macro()); | |
575 } | |
576 | |
577 /** | |
578 * Display this dialog, and auto-validate its contents to start with | |
579 */ | |
580 public void setVisible(boolean visible) { | |
581 super.setVisible(visible); | |
582 /* | |
583 * If we're being hidden, then just return | |
584 */ | |
585 if (!visible) | |
586 return; | |
587 /* | |
588 * Validate the current contents of the macro so we can tell the user | |
589 * about any syntax errors in the existing definition. | |
590 */ | |
591 try { | |
592 macroTableModel.macro.validate(); | |
593 } catch (ValidationException e) { | |
594 // Errors; advise user by putting up a dialog | |
595 MessageFormat form = new MessageFormat( | |
596 ResourceStrings.getString("bad_option_value")); | |
597 Object [] args = new Object[2]; | |
598 OptionValue ov = macroTableModel.macro.getOption(e.getMessage()); | |
599 if (ov == null) { | |
600 args[0] = ""; | |
601 } else { | |
602 args[0] = ov.getValue(); | |
603 } | |
604 args[1] = e.getMessage(); | |
605 JOptionPane.showMessageDialog(this, form.format(args), | |
606 ResourceStrings.getString("server_error_title"), | |
607 JOptionPane.ERROR_MESSAGE); | |
608 int row = macroTableModel.findRowForOption(e.getMessage()); | |
609 if (row != -1) { | |
610 macroTable.clearSelection(); | |
611 macroTable.addRowSelectionInterval(row, row); | |
612 macroTable.scrollRectToVisible( | |
613 macroTable.getCellRect(row, 0, false)); | |
614 } | |
615 } | |
616 } | |
617 | |
618 public void setMacro(Macro m) { | |
619 originalMacro = (Macro)m.clone(); // Keep a copy so we can do a reset | |
620 if (mode != DUPLICATE) { | |
621 name.setText(m.getKey()); | |
622 } | |
623 macroTableModel.setMacro(m); | |
624 } | |
625 | |
626 public void buttonPressed(int buttonId) { | |
627 switch (buttonId) { | |
628 case OK: | |
629 // A macro with no options is not useful, so don't allow it | |
630 if (macroTableModel.getRowCount() == 0) { | |
631 JOptionPane.showMessageDialog(this, | |
632 ResourceStrings.getString("empty_macro_error"), | |
633 ResourceStrings.getString("server_error_title"), | |
634 JOptionPane.ERROR_MESSAGE); | |
635 return; | |
636 } | |
637 try { | |
638 macroTableModel.macro.setKey(name.getText()); | |
639 } catch (ValidationException e) { | |
640 // Not a valid macro name | |
641 MessageFormat form = new MessageFormat( | |
642 ResourceStrings.getString("bad_macro_name")); | |
643 Object [] args = new Object[] { name.getText() }; | |
644 JOptionPane.showMessageDialog(this, form.format(args), | |
645 ResourceStrings.getString("server_error_title"), | |
646 JOptionPane.ERROR_MESSAGE); | |
647 return; | |
648 } | |
649 try { | |
650 // Validate the macro | |
651 macroTableModel.macro.validate(); | |
652 DhcptabMgr server = DataManager.get().getDhcptabMgr(); | |
653 if ((mode == CREATE) || (mode == DUPLICATE)) { | |
654 server.createRecord(macroTableModel.macro, | |
655 signalBox.isSelected()); | |
656 } else if (mode == EDIT) { | |
657 server.modifyRecord(originalMacro, macroTableModel.macro, | |
658 signalBox.isSelected()); | |
659 } | |
660 fireActionPerformed(); | |
661 setVisible(false); | |
662 dispose(); | |
663 } catch (ValidationException ve) { | |
664 MessageFormat form = new MessageFormat( | |
665 ResourceStrings.getString("bad_option_value")); | |
666 Object [] args = new Object[2]; | |
667 OptionValue ov = | |
668 macroTableModel.macro.getOption(ve.getMessage()); | |
669 if (ov == null) { | |
670 args[0] = ""; | |
671 } else { | |
672 args[0] = ov.getValue(); | |
673 } | |
674 args[1] = ve.getMessage(); | |
675 JOptionPane.showMessageDialog(this, form.format(args), | |
676 ResourceStrings.getString("server_error_title"), | |
677 JOptionPane.ERROR_MESSAGE); | |
678 } catch (NotRunningException e) { | |
679 // Server not running, put up a warning | |
680 JOptionPane.showMessageDialog(this, | |
681 ResourceStrings.getString("server_not_running"), | |
682 ResourceStrings.getString("warning"), | |
683 JOptionPane.WARNING_MESSAGE); | |
684 fireActionPerformed(); | |
685 setVisible(false); | |
686 dispose(); | |
687 } catch (Exception e) { | |
688 MessageFormat form = null; | |
689 Object [] args = new Object[2]; | |
690 switch (mode) { | |
691 case CREATE: | |
692 case DUPLICATE: | |
693 form = new MessageFormat( | |
694 ResourceStrings.getString("create_macro_error")); | |
695 args[0] = macroTableModel.macro.getKey(); | |
696 break; | |
697 case EDIT: | |
698 form = new MessageFormat( | |
699 ResourceStrings.getString("edit_macro_error")); | |
700 args[0] = originalMacro.getKey(); | |
701 break; | |
702 } | |
703 args[1] = e.getMessage(); | |
704 JOptionPane.showMessageDialog(this, form.format(args), | |
705 ResourceStrings.getString("server_error_title"), | |
706 JOptionPane.ERROR_MESSAGE); | |
707 } | |
708 break; | |
709 case CANCEL: | |
710 setVisible(false); | |
711 dispose(); | |
712 break; | |
713 case HELP: | |
714 String helpTag = null; | |
715 switch (mode) { | |
716 case CREATE: | |
717 helpTag = "create_macro"; | |
718 break; | |
719 case DUPLICATE: | |
720 helpTag = "duplicate_macro"; | |
721 break; | |
722 case EDIT: | |
723 helpTag = "modify_macro"; | |
724 break; | |
725 } | |
726 DhcpmgrApplet.showHelp(helpTag); | |
727 break; | |
728 case RESET: | |
729 setMacro(originalMacro); | |
730 signalBox.setSelected(true); | |
731 break; | |
732 } | |
733 } | |
734 | |
735 public void addActionListener(ActionListener l) { | |
736 listeners.addElement(l); | |
737 } | |
738 | |
739 public void removeActionListener(ActionListener l) { | |
740 listeners.removeElement(l); | |
741 } | |
742 | |
743 protected void fireActionPerformed() { | |
744 String command = null; | |
745 switch (mode) { | |
746 case CREATE: | |
747 command = DialogActions.CREATE; | |
748 case DUPLICATE: | |
749 command = DialogActions.DUPLICATE; | |
750 break; | |
751 case EDIT: | |
752 command = DialogActions.EDIT; | |
753 break; | |
754 } | |
755 ActionEvent e = new ActionEvent(this, ActionEvent.ACTION_PERFORMED, | |
756 command); | |
757 Enumeration en = listeners.elements(); | |
758 while (en.hasMoreElements()) { | |
759 ActionListener l = (ActionListener)en.nextElement(); | |
760 l.actionPerformed(e); | |
761 } | |
762 } | |
763 } |