diff options
author | Bernard Normier <bernard@zeroc.com> | 2006-12-12 23:19:21 +0000 |
---|---|---|
committer | Bernard Normier <bernard@zeroc.com> | 2006-12-12 23:19:21 +0000 |
commit | 5e28e3a630f7eadc09c215d7c684faae7ffecca4 (patch) | |
tree | 31d40d963d9119e23e99a69fbebd6d1bb5293f84 /java/src | |
parent | http://bugzilla.zeroc.com/bugzilla/show_bug.cgi?id=1616. Fixed SSL bug with (diff) | |
download | ice-5e28e3a630f7eadc09c215d7c684faae7ffecca4.tar.bz2 ice-5e28e3a630f7eadc09c215d7c684faae7ffecca4.tar.xz ice-5e28e3a630f7eadc09c215d7c684faae7ffecca4.zip |
Completed ShowLogDialog implementation
Diffstat (limited to 'java/src')
-rwxr-xr-x | java/src/IceGridGUI/Coordinator.java | 47 | ||||
-rwxr-xr-x | java/src/IceGridGUI/LiveDeployment/Node.java | 5 | ||||
-rwxr-xr-x | java/src/IceGridGUI/LiveDeployment/Root.java | 57 | ||||
-rwxr-xr-x | java/src/IceGridGUI/LiveDeployment/Server.java | 5 | ||||
-rw-r--r-- | java/src/IceGridGUI/LiveDeployment/ShowLogDialog.java | 325 | ||||
-rw-r--r-- | java/src/IceGridGUI/LiveDeployment/ShowLogPrefsDialog.java | 162 |
6 files changed, 502 insertions, 99 deletions
diff --git a/java/src/IceGridGUI/Coordinator.java b/java/src/IceGridGUI/Coordinator.java index ddaec965c7c..b7821807165 100755 --- a/java/src/IceGridGUI/Coordinator.java +++ b/java/src/IceGridGUI/Coordinator.java @@ -1548,23 +1548,23 @@ public class Coordinator { if(file != null) { - _saveChooser.setSelectedFile(file); + _saveXMLChooser.setSelectedFile(file); } else { - _saveChooser.setCurrentDirectory(_openChooser.getCurrentDirectory()); + _saveXMLChooser.setCurrentDirectory(_openChooser.getCurrentDirectory()); } - int result = _saveChooser.showSaveDialog(_mainFrame); + int result = _saveXMLChooser.showSaveDialog(_mainFrame); if(file == null || result == JFileChooser.APPROVE_OPTION) { - _openChooser.setCurrentDirectory(_saveChooser.getCurrentDirectory()); + _openChooser.setCurrentDirectory(_saveXMLChooser.getCurrentDirectory()); } if(result == JFileChooser.APPROVE_OPTION) { - file = _saveChooser.getSelectedFile(); + file = _saveXMLChooser.getSelectedFile(); } else { @@ -1608,8 +1608,12 @@ public class Coordinator } return file; } + + public JFileChooser getSaveLogChooser() + { + return _saveLogChooser; + } - static private Ice.Properties createProperties(Ice.StringSeqHolder args) { Ice.Properties properties = Ice.Util.createProperties(); @@ -1670,10 +1674,10 @@ public class Coordinator Runtime.getRuntime().addShutdownHook(_shutdownHook); - _saveChooser = new JFileChooser( + _saveXMLChooser = new JFileChooser( _prefs.get("current directory", null)); - _saveChooser.addChoosableFileFilter(new FileFilter() + _saveXMLChooser.addChoosableFileFilter(new FileFilter() { public boolean accept(File f) { @@ -1686,11 +1690,31 @@ public class Coordinator } }); + _saveLogChooser = new JFileChooser( + _prefs.get("current directory", null)); + + _saveLogChooser.addChoosableFileFilter(new FileFilter() + { + public boolean accept(File f) + { + return f.isDirectory() || + f.getName().endsWith(".out") || + f.getName().endsWith(".err") || + f.getName().endsWith(".log") || + f.getName().endsWith(".txt"); + } + + public String getDescription() + { + return ".out .err .log .txt files"; + } + }); + javax.swing.UIManager.put("FileChooser.readOnly", Boolean.TRUE); - _openChooser = new JFileChooser(_saveChooser.getCurrentDirectory()); + _openChooser = new JFileChooser(_saveXMLChooser.getCurrentDirectory()); - _openChooser.addChoosableFileFilter(_saveChooser.getChoosableFileFilters()[1]); + _openChooser.addChoosableFileFilter(_saveXMLChooser.getChoosableFileFilters()[1]); final int MENU_MASK = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(); @@ -2421,7 +2445,8 @@ public class Coordinator private final Thread _shutdownHook; private JFileChooser _openChooser; - private JFileChooser _saveChooser; + private JFileChooser _saveXMLChooser; + private JFileChooser _saveLogChooser; private Process _icegridadminProcess; private String _fileParser; diff --git a/java/src/IceGridGUI/LiveDeployment/Node.java b/java/src/IceGridGUI/LiveDeployment/Node.java index bb70bbd6415..986fd65223e 100755 --- a/java/src/IceGridGUI/LiveDeployment/Node.java +++ b/java/src/IceGridGUI/LiveDeployment/Node.java @@ -64,6 +64,11 @@ class Node extends ListTreeNode { return "Node " + _id + " " + (stdout ? "Stdout" : "Stderr"); } + + public String getDefaultFilename() + { + return _id + (stdout ? ".out" : ".err"); + } }); } diff --git a/java/src/IceGridGUI/LiveDeployment/Root.java b/java/src/IceGridGUI/LiveDeployment/Root.java index cafe9e8d64d..d545c96b5af 100755 --- a/java/src/IceGridGUI/LiveDeployment/Root.java +++ b/java/src/IceGridGUI/LiveDeployment/Root.java @@ -37,7 +37,8 @@ public class Root extends ListArrayTreeNode _coordinator = coordinator; _childrenArray[0] = _slaves; _childrenArray[1] = _nodes; - + _messageSizeMax = Ice.Util.getInstance(_coordinator.getCommunicator()).messageSizeMax(); + _tree = new JTree(this, true); _treeModel = (DefaultTreeModel)_tree.getModel(); _objectDialog = new ObjectDialog(this); @@ -866,6 +867,12 @@ public class Root extends ListArrayTreeNode { return "Registry " + _label + " " + (stdout ? "Stdout" : "Stderr"); } + + public String getDefaultFilename() + { + return _replicaName + (stdout ? ".out" : ".err"); + } + }); } @@ -884,8 +891,7 @@ public class Root extends ListArrayTreeNode if(d == null) { d = new ShowLogDialog(this, factory, - _logPeriod, _logInitialLines, - _logMaxLines, _logMaxSize, _logMaxReadLines); + _logMaxLines, _logMaxSize, _logInitialLines, _logMaxReadSize, _logPeriod); _showLogDialogMap.put(factory.getTitle(), d); } @@ -911,25 +917,47 @@ public class Root extends ListArrayTreeNode _showLogDialogMap.clear(); } + public int getMessageSizeMax() + { + return _messageSizeMax; + } + + + public void setLogPrefs(int maxLines, int maxSize, int initialLines, int maxReadSize, int period) + { + _logMaxLines = maxLines; + _logMaxSize = maxSize; + _logInitialLines = initialLines; + _logMaxReadSize = maxReadSize; + _logPeriod = period; + + storeLogPrefs(); + } + private void loadLogPrefs() { Preferences logPrefs = _coordinator.getPrefs().node("Log"); - _logPeriod = logPrefs.getInt("period", 300); - _logInitialLines = logPrefs.getInt("initialLines", 10); _logMaxLines = logPrefs.getInt("maxLines", 500); _logMaxSize = logPrefs.getInt("maxSize", 20000); - _logMaxReadLines = logPrefs.getInt("maxReadLines", 50); + _logInitialLines = logPrefs.getInt("initialLines", 10); + _logMaxReadSize = logPrefs.getInt("maxReadSize", 10000); + _logPeriod = logPrefs.getInt("period", 300); + + if(_logMaxReadSize + 512 > _messageSizeMax) + { + _logMaxReadSize = _messageSizeMax - 512; + } } private void storeLogPrefs() { Preferences logPrefs = _coordinator.getPrefs().node("Log"); - logPrefs.putInt("period", _logPeriod); - logPrefs.putInt("initialLines", _logInitialLines); logPrefs.putInt("maxLines", _logMaxLines); logPrefs.putInt("maxSize", _logMaxSize); - logPrefs.putInt("maxReadLines", _logMaxReadLines); + logPrefs.putInt("initialLines", _logInitialLines); + logPrefs.putInt("maxReadSize", _logMaxReadSize); + logPrefs.putInt("period", _logPeriod); } @@ -1000,13 +1028,16 @@ public class Root extends ListArrayTreeNode // // ShowLogDialog // + final int _messageSizeMax; + java.util.Map _showLogDialogMap = new java.util.HashMap(); - int _logPeriod; - int _logInitialLines; + int _logMaxLines; int _logMaxSize; - int _logMaxReadLines; - + int _logInitialLines; + int _logMaxReadSize; + int _logPeriod; + static private RegistryEditor _editor; static private JPopupMenu _popup; static private DefaultTreeCellRenderer _cellRenderer; diff --git a/java/src/IceGridGUI/LiveDeployment/Server.java b/java/src/IceGridGUI/LiveDeployment/Server.java index d774e004ae9..9aa3a57d973 100755 --- a/java/src/IceGridGUI/LiveDeployment/Server.java +++ b/java/src/IceGridGUI/LiveDeployment/Server.java @@ -192,6 +192,11 @@ class Server extends ListArrayTreeNode { return "Server " + _id + " " + (stdout ? "Stdout" : "Stderr"); } + + public String getDefaultFilename() + { + return _id + (stdout ? ".out" : ".err"); + } }); } diff --git a/java/src/IceGridGUI/LiveDeployment/ShowLogDialog.java b/java/src/IceGridGUI/LiveDeployment/ShowLogDialog.java index c41ef275805..92a0ec8f2bb 100644 --- a/java/src/IceGridGUI/LiveDeployment/ShowLogDialog.java +++ b/java/src/IceGridGUI/LiveDeployment/ShowLogDialog.java @@ -16,21 +16,24 @@ import java.awt.Frame; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.event.KeyEvent; import javax.swing.AbstractAction; import javax.swing.Action; -import javax.swing.JButton; -import javax.swing.JComboBox; +import javax.swing.ButtonGroup; import javax.swing.JComponent; import javax.swing.JDialog; +import javax.swing.JFileChooser; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JOptionPane; import javax.swing.JPanel; -import javax.swing.JRadioButton; +import javax.swing.JRadioButtonMenuItem; import javax.swing.JScrollPane; import javax.swing.JTextArea; +import javax.swing.JToggleButton; import javax.swing.JToolBar; +import javax.swing.KeyStroke; import javax.swing.SwingUtilities; import com.jgoodies.looks.BorderStyle; @@ -49,6 +52,8 @@ class ShowLogDialog extends JDialog throws Ice.UserException; String getTitle(); + + String getDefaultFilename(); } private class FIFOTextArea extends JTextArea @@ -116,14 +121,15 @@ class ShowLogDialog extends JDialog { ReaderThread() { - _threadInitialLines = _initialLines; _threadMaxLines = _maxLines; _threadMaxSize = _maxSize; - _threadMaxReadLines = _maxReadLines; + _threadInitialLines = _initialLines; + _threadMaxReadSize = _maxReadSize; + _threadPeriod = _period; - _play.setEnabled(false); + _playButton.setSelected(true); + _playItem.setSelected(true); _pause.setEnabled(true); - _stop.setEnabled(true); } private void openError(final String message) @@ -219,7 +225,7 @@ class ShowLogDialog extends JDialog { try { - wait(_period); + wait(_threadPeriod); } catch(InterruptedException e) { @@ -244,8 +250,8 @@ class ShowLogDialog extends JDialog { int maxLines; int maxSize; - int maxReadLines; - + int maxReadSize; + synchronized(this) { if(_done || _paused) @@ -255,14 +261,14 @@ class ShowLogDialog extends JDialog maxLines = _threadMaxLines; maxSize = _threadMaxSize; - maxReadLines = _threadMaxReadLines; + maxReadSize = _threadMaxReadSize; } Ice.StringSeqHolder linesHolder = new Ice.StringSeqHolder(); try { - eofEncountered = _p.read(_maxReadSize, linesHolder); + eofEncountered = _p.read(maxReadSize, linesHolder); } catch(IceGrid.FileNotAvailableException e) { @@ -321,41 +327,49 @@ class ShowLogDialog extends JDialog synchronized void pause() { - assert !_paused; - _paused = true; - notify(); + if(!_paused) + { + _paused = true; + notify(); + } } synchronized void terminate() { - _done = true; - notify(); + if(!_done) + { + _done = true; + notify(); + } } synchronized void play() { - assert _paused; - _paused = false; - notify(); + if(_paused) + { + _paused = false; + notify(); + } } - synchronized void setPrefs(int initialLines, int maxLines, int maxSize, int maxReadLines) + synchronized void setPrefs() { - _threadInitialLines = initialLines; - _threadMaxLines = maxLines; - _threadMaxSize = maxSize; - _threadMaxReadLines = maxReadLines; + _threadMaxLines = _maxLines; + _threadMaxSize = _maxSize; + _threadInitialLines = _initialLines; + _threadMaxReadSize = _maxReadSize; + _threadPeriod = _period; } private FileIteratorPrx _p; private boolean _done = false; private boolean _paused = false; - private int _threadInitialLines; private int _threadMaxLines; private int _threadMaxSize; - private int _threadMaxReadLines; - + private int _threadInitialLines; + private int _threadMaxReadSize; + private int _threadPeriod; } private class MenuBar extends JMenuBar @@ -365,24 +379,99 @@ class ShowLogDialog extends JDialog putClientProperty(Options.HEADER_STYLE_KEY, HeaderStyle.BOTH); putClientProperty(PlasticLookAndFeel.BORDER_STYLE_KEY, BorderStyle.SEPARATOR); + final int MENU_MASK = java.awt.Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(); + // // File menu // JMenu fileMenu = new JMenu("File"); fileMenu.setMnemonic(java.awt.event.KeyEvent.VK_F); add(fileMenu); - fileMenu.add(_pause); - fileMenu.add(_play); - fileMenu.add(_stop); + + ButtonGroup bg = new ButtonGroup(); + + _pauseItem = new JRadioButtonMenuItem(_pause); + fileMenu.add(_pauseItem); + bg.add(_pauseItem); + _playItem = new JRadioButtonMenuItem(_play); + fileMenu.add(_playItem); + bg.add(_playItem); + _stopItem = new JRadioButtonMenuItem(_stop); + fileMenu.add(_stopItem); + bg.add(_stopItem); fileMenu.addSeparator(); - fileMenu.add(new AbstractAction("Save as...") + + Action save = new AbstractAction("Save As...") { - public void actionPerformed(ActionEvent e) + public void actionPerformed(ActionEvent e) { - // todo - } + JFileChooser fileChooser = _root.getCoordinator().getSaveLogChooser(); + + fileChooser.setSelectedFile(new java.io.File(fileChooser.getCurrentDirectory(), + _factory.getDefaultFilename())); + + java.io.File file = null; - }); + while(file == null) + { + int result = fileChooser.showSaveDialog(ShowLogDialog.this); + if(result == JFileChooser.APPROVE_OPTION) + { + file = fileChooser.getSelectedFile(); + + if(file != null) + { + if(!file.exists() && file.getName().indexOf('.') == -1) + { + file = new java.io.File(file.getAbsolutePath() + ".log"); + } + + java.io.OutputStreamWriter os = null; + + try + { + os = new java.io.OutputStreamWriter(new java.io.FileOutputStream(file)); + String txt = _textArea.getText(); + if(txt == null) + { + txt = ""; + } + os.write(txt, 0, txt.length()); + } + catch(java.io.IOException io) + { + JOptionPane.showMessageDialog( + ShowLogDialog.this, + io.toString(), + "Cannot write file", + JOptionPane.ERROR_MESSAGE); + } + finally + { + if(os != null) + { + try + { + os.close(); + } + catch(java.io.IOException io) + { + } + } + } + } + } + else + { + break; // while + } + } + } + }; + save.putValue(Action.ACCELERATOR_KEY, + KeyStroke.getKeyStroke(KeyEvent.VK_S, MENU_MASK)); + save.putValue(Action.SHORT_DESCRIPTION, "Save As..."); + fileMenu.add(save); fileMenu.addSeparator(); fileMenu.add(new AbstractAction("Close") @@ -395,30 +484,40 @@ class ShowLogDialog extends JDialog JMenu editMenu = new JMenu("Edit"); editMenu.setMnemonic(java.awt.event.KeyEvent.VK_E); add(editMenu); - editMenu.add(new AbstractAction("Copy") + + Action copy = new AbstractAction("Copy") { public void actionPerformed(ActionEvent e) { _textArea.copy(); } + + }; + copy.putValue(Action.ACCELERATOR_KEY, + KeyStroke.getKeyStroke(KeyEvent.VK_C, MENU_MASK)); + copy.putValue(Action.SHORT_DESCRIPTION, "Copy"); + editMenu.add(copy); - }); editMenu.addSeparator(); - editMenu.add(new AbstractAction("Select all") + Action selectAll = new AbstractAction("Select All") { public void actionPerformed(ActionEvent e) { _textArea.grabFocus(); _textArea.selectAll(); } + }; + selectAll.putValue(Action.ACCELERATOR_KEY, + KeyStroke.getKeyStroke(KeyEvent.VK_A, MENU_MASK)); + selectAll.putValue(Action.SHORT_DESCRIPTION, "Select All"); - }); + editMenu.add(selectAll); editMenu.addSeparator(); - editMenu.add(new AbstractAction("Preferences") + editMenu.add(new AbstractAction("Preferences...") { public void actionPerformed(ActionEvent e) { - // todo + new ShowLogPrefsDialog(ShowLogDialog.this); } }); } @@ -433,33 +532,37 @@ class ShowLogDialog extends JDialog setFloatable(false); putClientProperty("JToolBar.isRollover", Boolean.TRUE); - JButton button = new JButton(_pause); - button.setText(null); - button.setIcon(Utils.getIcon("/icons/16x16/pause.png")); - add(button); - button = new JButton(_play); - button.setText(null); - button.setIcon(Utils.getIcon("/icons/16x16/start.png")); - add(button); - button = new JButton(_stop); - button.setText(null); - button.setIcon(Utils.getIcon("/icons/16x16/stop.png")); - add(button); - + _pauseButton = new JToggleButton(_pause); + _pauseButton.setText(null); + _pauseButton.setIcon(Utils.getIcon("/icons/16x16/pause.png")); + add(_pauseButton); + _playButton = new JToggleButton(_play); + _playButton.setText(null); + _playButton.setIcon(Utils.getIcon("/icons/16x16/start.png")); + add(_playButton); + _stopButton = new JToggleButton(_stop); + _stopButton.setText(null); + _stopButton.setIcon(Utils.getIcon("/icons/16x16/stop.png")); + add(_stopButton); + + ButtonGroup bg = new ButtonGroup(); + bg.add(_pauseButton); + bg.add(_playButton); + bg.add(_stopButton); } } ShowLogDialog(Root root, FileIteratorFactory factory, - int period, int initialLines, int maxLines, int maxSize, int maxReadLines) + int maxLines, int maxSize, int initialLines, int maxReadSize, int period) { super(root.getCoordinator().getMainFrame(), factory.getTitle() + " - IceGrid Admin", false); - _period = period; - _initialLines = initialLines; _maxLines = maxLines; _maxSize = maxSize; - _maxReadLines = maxReadLines; + _initialLines = initialLines; + _maxReadSize = maxReadSize; + _period = period; _factory = factory; _root = root; @@ -479,8 +582,6 @@ class ShowLogDialog extends JDialog pause(); } }; - _pause.setEnabled(false); - _play = new AbstractAction("Play") { @@ -488,9 +589,7 @@ class ShowLogDialog extends JDialog { play(); } - }; - _play.setEnabled(false); - + }; _stop = new AbstractAction("Stop") { @@ -499,7 +598,6 @@ class ShowLogDialog extends JDialog stopReading(); } }; - _stop.setEnabled(false); setJMenuBar(new MenuBar()); getContentPane().add(new ToolBar(), @@ -521,8 +619,8 @@ class ShowLogDialog extends JDialog void pause() { _thread.pause(); - _pause.setEnabled(false); - _play.setEnabled(true); + _pauseItem.setSelected(true); + _pauseButton.setSelected(true); } void stopReading() @@ -540,8 +638,8 @@ class ShowLogDialog extends JDialog } _thread = null; - _stop.setEnabled(false); - _play.setEnabled(true); + _stopItem.setSelected(true); + _stopButton.setSelected(true); _pause.setEnabled(false); } } @@ -551,9 +649,9 @@ class ShowLogDialog extends JDialog if(_thread != null) { _thread.play(); - _play.setEnabled(false); + _playItem.setSelected(true); + _playButton.setSelected(true); _pause.setEnabled(true); - _stop.setEnabled(true); } else { @@ -562,6 +660,76 @@ class ShowLogDialog extends JDialog } } + int getMaxLines() + { + return _maxLines; + } + + int getMaxSize() + { + return _maxSize; + } + + int getInitialLines() + { + return _initialLines; + } + + int getMaxReadSize() + { + return _maxReadSize; + } + + int getPeriod() + { + return _period; + } + + void setPrefs(int maxLines, int maxSize, int initialLines, int maxReadSize, int period) + { + if(maxLines < 50) + { + maxLines = 50; + } + _maxLines = maxLines; + + if(maxSize < 1000) + { + maxSize = 1000; + } + _maxSize = maxSize; + + _initialLines = initialLines; + + if(maxReadSize < 100) + { + maxReadSize = 100; + } + else if(maxReadSize + 512 > _root.getMessageSizeMax()) + { + maxReadSize = _root.getMessageSizeMax() - 512; + } + _maxReadSize = maxReadSize; + + if(period < 200) + { + period = 200; + } + else if(period > 5000) + { + period = 5000; + } + _period = period; + + if(_thread != null) + { + _thread.setPrefs(); + } + + _root.setLogPrefs(_maxLines, _maxSize, _initialLines, _maxReadSize, _period); + + } + void close(boolean notifyRoot) { stopReading(); @@ -575,18 +743,25 @@ class ShowLogDialog extends JDialog private final Root _root; private final FileIteratorFactory _factory; - private final int _maxReadSize = 800000; // TODO, compute from MessageSizeMax or remove - private int _period; - private int _initialLines; private int _maxLines; private int _maxSize; - private int _maxReadLines; + private int _initialLines; + private int _maxReadSize; + private int _period; private Action _play; private Action _pause; private Action _stop; + private JRadioButtonMenuItem _playItem; + private JRadioButtonMenuItem _pauseItem; + private JRadioButtonMenuItem _stopItem; + + private JToggleButton _playButton; + private JToggleButton _pauseButton; + private JToggleButton _stopButton; + private FIFOTextArea _textArea = new FIFOTextArea(20, 45); private ReaderThread _thread; } diff --git a/java/src/IceGridGUI/LiveDeployment/ShowLogPrefsDialog.java b/java/src/IceGridGUI/LiveDeployment/ShowLogPrefsDialog.java new file mode 100644 index 00000000000..0851c6c45df --- /dev/null +++ b/java/src/IceGridGUI/LiveDeployment/ShowLogPrefsDialog.java @@ -0,0 +1,162 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2006 ZeroC, Inc. All rights reserved. +// +// This copy of Ice is licensed to you under the terms described in the +// ICE_LICENSE file included in this distribution. +// +// ********************************************************************** +package IceGridGUI.LiveDeployment; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.BoxLayout; +import javax.swing.JButton; +import javax.swing.JComponent; +import javax.swing.JDialog; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JTextField; + +import com.jgoodies.forms.builder.DefaultFormBuilder; +import com.jgoodies.forms.factories.Borders; +import com.jgoodies.forms.factories.ButtonBarFactory; +import com.jgoodies.forms.layout.FormLayout; +import com.jgoodies.forms.util.LayoutStyle; + +import IceGrid.*; +import IceGridGUI.*; + +class ShowLogPrefsDialog extends JDialog +{ + ShowLogPrefsDialog(final ShowLogDialog sld) + { + super(sld, "Preferences - IceGrid Admin", true); + setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); + + final JTextField maxLinesField = new JTextField(10); + maxLinesField.setText(Integer.toString(sld.getMaxLines())); + maxLinesField.setToolTipText("Maximum number of lines in this dialog's buffer"); + + final JTextField maxSizeField = new JTextField(10); + maxSizeField.setText(Integer.toString(sld.getMaxSize())); + maxSizeField.setToolTipText("Maximum number of bytes in this dialog's buffer"); + + final JTextField initialLinesField = new JTextField(10); + initialLinesField.setText(Integer.toString(sld.getInitialLines())); + initialLinesField.setToolTipText("Start by retrieving <num> lines from the server; -1 means retrieve all"); + + final JTextField maxReadSizeField = new JTextField(10); + maxReadSizeField.setText(Integer.toString(sld.getMaxReadSize())); + maxReadSizeField.setToolTipText("Maximum number of bytes read by each request"); + + final JTextField periodField = new JTextField(10); + periodField.setText(Float.toString((float)sld.getPeriod() / 1000)); + periodField.setToolTipText("After reaching EOF, check every <num> seconds for new output"); + + JButton okButton = new JButton("OK"); + ActionListener okListener = new ActionListener() + { + public void actionPerformed(ActionEvent e) + { + try + { + int maxLines = parseInt(maxLinesField, "Max lines in buffer"); + int maxSize = parseInt(maxSizeField, "Max bytes in buffer"); + int initialLines = parseInt(initialLinesField, "Initial tail (lines)"); + int maxReadSize = parseInt(maxReadSizeField, "Max bytes read per request"); + int period = (int)(parseFloat(periodField, "Poll period (seconds)") * 1000); + + sld.setPrefs(maxLines, maxSize, initialLines, maxReadSize, period); + dispose(); + } + catch(NumberFormatException ex) + { + return; + } + } + }; + okButton.addActionListener(okListener); + getRootPane().setDefaultButton(okButton); + + JButton cancelButton = new JButton("Cancel"); + ActionListener cancelListener = new ActionListener() + { + public void actionPerformed(ActionEvent e) + { + dispose(); + } + }; + cancelButton.addActionListener(cancelListener); + + + FormLayout layout = new FormLayout("left:pref, 3dlu, fill:pref:grow", ""); + DefaultFormBuilder builder = new DefaultFormBuilder(layout); + builder.setDefaultDialogBorder(); + builder.setRowGroupingEnabled(true); + builder.setLineGapSize(LayoutStyle.getCurrent().getLinePad()); + + builder.append("Max lines in buffer", maxLinesField); + builder.nextLine(); + builder.append("Max bytes in buffer", maxSizeField); + builder.nextLine(); + builder.append("Initial tail (lines)", initialLinesField); + builder.nextLine(); + builder.append("Max bytes read per request", maxReadSizeField); + builder.nextLine(); + builder.append("Poll period (seconds)", periodField); + builder.nextLine(); + + JComponent buttonBar = + ButtonBarFactory.buildOKCancelBar(okButton, cancelButton); + buttonBar.setBorder(Borders.DIALOG_BORDER); + + java.awt.Container contentPane = getContentPane(); + contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.Y_AXIS)); + contentPane.add(builder.getPanel()); + contentPane.add(buttonBar); + + pack(); + setResizable(false); + setLocationRelativeTo(sld); + setVisible(true); + } + + + private int parseInt(JTextField field, String label) throws NumberFormatException + { + try + { + return Integer.parseInt(field.getText()); + } + catch(NumberFormatException e) + { + JOptionPane.showMessageDialog( + this, + label + " must be an integer", + "Invalid entry", + JOptionPane.ERROR_MESSAGE); + + throw e; + } + } + + private float parseFloat(JTextField field, String label) throws NumberFormatException + { + try + { + return Float.parseFloat(field.getText()); + } + catch(NumberFormatException e) + { + JOptionPane.showMessageDialog( + this, + label + " must be a decimal number", + "Invalid entry", + JOptionPane.ERROR_MESSAGE); + + throw e; + } + } +} |