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]

Reply via email to