psmith 2003/06/25 16:11:59 Modified: src/java/org/apache/log4j/chainsaw ReceiversPanel.java Log: added Port validation logic. Revision Changes Path 1.3 +115 -9 jakarta-log4j/src/java/org/apache/log4j/chainsaw/ReceiversPanel.java Index: ReceiversPanel.java =================================================================== RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/log4j/chainsaw/ReceiversPanel.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- ReceiversPanel.java 25 Jun 2003 08:25:24 -0000 1.2 +++ ReceiversPanel.java 25 Jun 2003 23:11:59 -0000 1.3 @@ -70,9 +70,11 @@ import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.RenderingHints; +import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; +import java.awt.event.KeyListener; import java.util.Collection; import java.util.HashMap; @@ -87,6 +89,7 @@ import javax.swing.Box; import javax.swing.Icon; import javax.swing.ImageIcon; +import javax.swing.InputVerifier; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JDialog; @@ -576,13 +579,24 @@ } } + /** + * A popup menu that allows the user to choose which + * style of Receiver to create, which spawns a relevant Dialog + * to enter the information and create the Receiver + * + * @author Paul Smith <[EMAIL PROTECTED]> + * + */ class NewReceiverPopupMenu extends JPopupMenu { NewReceiverPopupMenu() { Class[] receivers = new Class[] { SocketReceiver.class, UDPReceiver.class }; final Map dialogMap = new HashMap(); - dialogMap.put(SocketReceiver.class, new ReceiverPanel(SocketReceiver.class, "Socket Receiver", "SocketReceiver")); + dialogMap.put( + SocketReceiver.class, + new CreateReceiverDialog( + SocketReceiver.class, "SocketReceiver", "Socket Receiver")); for (int i = 0; i < receivers.length; i++) { final Class toCreate = receivers[i]; @@ -750,20 +764,22 @@ } } - private class ReceiverPanel extends JDialog { + private class CreateReceiverDialog extends JDialog { final OkCancelPanel okCancelPanel = new OkCancelPanel(); - private ReceiverPanel(Class receiver, String bundleName, String name) { + private CreateReceiverDialog( + Class receiver, String bundleName, String name) { super(logui, "Create new " + name, true); - + setResizable(false); getContentPane().setLayout(new GridBagLayout()); GridBagConstraints c = new GridBagConstraints(); Container container = getContentPane(); - ResourceBundle resourceBundle = ResourceBundle.getBundle("org/apache/log4j/chainsaw/Details_" + name); - -// TODO put the text about Socket Receiver in a Resource Bundle + ResourceBundle resourceBundle = + ResourceBundle.getBundle( + "org/apache/log4j/chainsaw/Details_" + bundleName); + JLabel infoLabel = new JLabel(resourceBundle.getString("Details")); infoLabel.setOpaque(true); @@ -793,7 +809,43 @@ JLabel portNumber = new JLabel("Port Number:"); - JTextField portNumberEntry = new JTextField(5); + final JTextField portNumberEntry = new JTextField(5); + portNumberEntry.setInputVerifier(new PortNumberVerifier()); + + // portNumberEntry.addKeyListener( + // new KeyListener() { + // public void keyTyped(KeyEvent e) { + // validateKeyPress(e); + // } + // + // public void keyPressed(KeyEvent e) { + // validateKeyPress(e); + // } + // + // private void validateKeyPress(KeyEvent e) { + // char c = e.getKeyChar(); + // int keyCode = e.getKeyCode(); + // + // if ((c < '0') || (c > '9')) { + // if ( + // (keyCode != KeyEvent.VK_BACK_SPACE) || (keyCode != KeyEvent.VK_DELETE) + // || (keyCode != KeyEvent.VK_ESCAPE)) { + // e.consume(); + // Toolkit.getDefaultToolkit().beep(); + // + // return; + // } + //// else if (portNumberEntry.getText().trim().length() >= 5) { + //// e.consume(); + //// Toolkit.getDefaultToolkit().beep(); + //// } + // } + // } + // + // public void keyReleased(KeyEvent e) { + // validateKeyPress(e); + // } + // }); portNumber.setLabelFor(portNumberEntry); c.gridwidth = 1; @@ -815,6 +867,7 @@ c.gridwidth = 2; c.weighty = 0; c.gridy++; + c.fill = GridBagConstraints.HORIZONTAL; c.insets = new Insets(0, 0, 0, 0); container.add(lineBox3, c); @@ -849,6 +902,59 @@ closeAction, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_IN_FOCUSED_WINDOW); } + + /** + * Returns true if string is a valid Port identifier. + * + * It must be a number, and be >0 and <32768 + * @param string + * @return true/false + */ + boolean validPort(String string) { + try { + int port = Integer.parseInt(string); + + return (port > 0) && (port < 32768); + } catch (NumberFormatException e) { + } + + return false; + } + + /** + * Verifies the defaults of a TextField by ensuring + * it conforms to a valid Port Number. + * + * If invalid, the text field is suffixed with " (invalid)" + * and all the text is selected, effectively + * prompting the user to enter again. + * + * @author Paul Smith <[EMAIL PROTECTED]> + * + */ + private final class PortNumberVerifier extends InputVerifier { + public boolean verify(JComponent input) { + if (input instanceof JTextField) { + JTextField textField = ((JTextField) input); + boolean valid = validPort(textField.getText()); + + if (!valid) { + String invalidString = " (invalid)"; + + if (!textField.getText().endsWith(invalidString)) { + textField.setText(textField.getText() + invalidString); + } + + textField.setSelectionStart(0); + textField.setSelectionEnd(textField.getText().length()); + } + + return valid; + } + + return true; + } + } } private static class OkCancelPanel extends JPanel { @@ -859,7 +965,7 @@ setLayout(new GridBagLayout()); cancelButton.setDefaultCapable(true); - + GridBagConstraints c = new GridBagConstraints(); c.fill = GridBagConstraints.HORIZONTAL;
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]