gt:         return false;           // ??
context: /*
     JpassField.java
     
     Created: 22 July 1997
  
     Module By: Jonathan Abbey, jonabbey@arlut.utexas.edu
  
     -----------------------------------------------------------------------
              
     Ganymede Directory Management System
   
     Copyright (C) 1996-2011
     The University of Texas at Austin
  
     Contact information
  
     Author Email: ganymede_author@arlut.utexas.edu
     Email mailing list: ganymede@arlut.utexas.edu
  
     US Mail:
  
     Computer Science Division
     Applied Research Laboratories
     The University of Texas at Austin
     PO Box 8029, Austin TX 78713-8029
  
     Telephone: (512) 835-3200
  
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
     the Free Software Foundation; either version 2 of the License, or
     (at your option) any later version.
  
     This program is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     GNU General Public License for more details.
  
     You should have received a copy of the GNU General Public License
     along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  */
  
  package arlut.csd.JDataComponent;
  
  import java.awt.Frame;
  import java.awt.GridBagConstraints;
  import java.awt.GridBagLayout;
  import java.rmi.RemoteException;
  
  import javax.swing.JButton;
  import javax.swing.JPanel;
  
  /*------------------------------------------------------------------------------
                                                                             class 
                                                                        JpassField
  
  ------------------------------------------------------------------------------*/
  
  /**
   * <p>JpassField is the composite two-field GUI component used for entering
   * passwords in the Ganymede client.</p>
   *
   * <p>This component uses a pair of {@link
   * arlut.csd.JDataComponent.JpasswordField} objects to prompt the user
   * to enter and then re-enter their password when entering a password change.</p>
   */
  
  public class JpassField extends JPanel implements JsetValueCallback {
  
    public static final boolean debug = false;
  
    public boolean allowCallback = false;
    protected boolean changed = false; 
  
    protected JsetValueCallback my_parent = null;
  
    Frame
      frame;
  
    JButton 
      changePass = null;
  
    JpasswordField 
      field1 = null,
      field2 = null;
  
    private boolean changingPass = false;
  
    String
      value1 = null,
      value2 = null;
  
    String validatedPass = null;
  
    /* -- */
  
    /**
     *
     * Constructor
     *
     */
  
    public JpassField(Frame frame,
                      int columns,
                      int maxstrlen,
                      boolean is_editable)
    {
      this(frame, columns, maxstrlen,
           is_editable,
           null,
           null);
    }
  
    /**
     *
     * Constructor
     *
     */
  
    public JpassField(Frame frame,
                      int columns, 
                      int maxstrlen, 
                      boolean is_editable,
                      String allowed, 
                      String disallowed) 
    {
      this.frame = frame;
  
      field1 = new JpasswordField(columns, maxstrlen, 
                                  is_editable, true, allowed, disallowed);
      
      field1.setCallback(this);
      field1.setEditable(is_editable);
      
      field2 = new JpasswordField(columns, maxstrlen,
                                  is_editable, true, allowed, disallowed);
      
      field2.setCallback(this);
      field2.setEditable(is_editable);
      
      GridBagLayout gbl;
      GridBagConstraints gbc;
      
      gbl = new GridBagLayout();
      gbc = new GridBagConstraints();
      gbc.anchor = GridBagConstraints.WEST;
      gbc.gridheight = 1;
      gbc.fill = GridBagConstraints.HORIZONTAL;
      
      setLayout(gbl);
      
      gbc.gridx = 0;
      gbc.gridy = 0;
      gbc.gridwidth = GridBagConstraints.REMAINDER;
      gbl.setConstraints(field1, gbc);
      add(field1);
      
      gbc.gridy = 1;
      gbl.setConstraints(field1, gbc);
      add(field2);
    }
  
    /**
     * <p>The callback our contained components use to report to us.</p>
     */
  
    public boolean setValuePerformed(JValueObject v)
    {
      JpasswordField s;
  
      /* -- */
  
      s = (JpasswordField) v.getSource();
  
      if (s == field1)
        {
          if (debug)
            {
              System.err.println("setting value 1");
            }
  
          value1 = (String) v.getValue();
  
          if (debug)
            {
              System.err.println("value 1 = " + value1);
            }
  
          field2.setText(null);
          value2 = null;
        }
      else if (s == field2)
        {
          if (debug)
            {
              System.err.println("setting value 2");
            }
  
          value2 = (String) v.getValue();
  
          if (debug)
            {
              System.err.println("value 2 = " + value2);
            }
  
          if (!changingPass && (value1 != null) && (value2 != null) && (value1.equals(value2)))
            {
              validatedPass = value2;
  
              try
                {
                  changingPass = true;
  
                  try
                    {
                      // if our callback rejects the password, it will
                      // handle informing the user of what and why
  
                      if (my_parent != null && !my_parent.setValuePerformed(new JSetValueObject(this, value1)))
                        {
                          value1 = null;
                          value2 = null;
                          field1.setText(null);
                          field2.setText(null);
  
                          // try again!
  
                          field1.requestFocus();
                          
                          return false;
                        }
                    }
                  finally
                    {
                      changingPass = false;
                    }
                }
              catch (RemoteException ex)
                {
                  reportError("Error communicating with server.. network or server problem?");
  
                  field1.setText(null);
                  field2.setText(null);
                  value1 = null;
                  value2 = null;
  
                  field1.requestFocus();
  
                  return false;
                }
            }
          else if ((value1 != null) && (value2 != null) && (!value1.equals(value2)))
            {
              reportError("Passwords do not match, please try again.");
  
              field1.setText(null);
              field2.setText(null);
              value1 = null;
              value2 = null;
              validatedPass = null;
  
              field1.requestFocus();
  
              return false;
            }
        }
      else
        {
          System.err.println("whatthe?");
  