001    /** =====================================================================       
002    *
003    *  File Name : $Id: ChangePasswordDialogBox.java,v 1.6 2008/01/15 11:08:16 cb Exp $
004    *
005    *  Description
006    *  -----------
007    *
008    *  =====================================================================
009    *
010    *   @author : Craige Bevil 
011    *             Control Software Group
012    *             Isaac Newton Group of Telescopes
013    *
014    *  =====================================================================
015    *
016    *     Modification Log
017    *
018    *     Vers         Date        Author       Reason
019    *     ----         ----        ------       ------
020    *      1                       C.Bevil      First Release
021    *
022    *     Commissioning Notes
023    *     -------------------
024    *
025    *     None
026    *     
027    *  =====================================================================
028    *
029    *     @version   : $Id: ChangePasswordDialogBox.java,v 1.6 2008/01/15 11:08:16 cb Exp $
030    *
031    *     @author    : $Author: cb $
032    *
033    *     Header     : $Header: /opt/INGsrc/src/CVS/softproj/FaultDatabase/src/FaultDatabase/FaultDatabase/src/GWTApplication/client/ChangePasswordDialogBox.java,v 1.6 2008/01/15 11:08:16 cb Exp $
034    *
035    *     Log        : $Log: ChangePasswordDialogBox.java,v $
036    *     Log        : Revision 1.6  2008/01/15 11:08:16  cb
037    *     Log        : Ran through PMD and sorted out the javadoc so that we could export the
038    *     Log        : javadoc to the javadoc repository.
039    *     Log        :
040    *     Log        : Revision 1.5  2007/12/17 11:42:02  cb
041    *     Log        : Modified so the focus is put into the first field of the dialog
042    *     Log        :
043    *     Log        : Revision 1.4  2007/12/13 14:46:38  cb
044    *     Log        : Modified as the Javascript library that I was using for displaying
045    *     Log        : messages clashes with the dialog boxes and looks the display.
046    *     Log        :
047    *     Log        : Revision 1.3  2007/12/12 15:26:17  cb
048    *     Log        : Added new javascript library which allows fancy message boxes to be
049    *     Log        : displayed.
050    *     Log        :
051    *     Log        : Revision 1.2  2007/08/17 14:22:28  cb
052    *     Log        : Optimised after PMD, display in centre of screen
053    *     Log        :
054    *     Log        : Revision 1.1  2007/07/24 08:25:23  cb
055    *     Log        : First version
056    *     Log        :
057    *
058    * =====================================================================*/
059    
060    package GWTApplication.client;
061    
062    import com.google.gwt.user.client.*;
063    import com.google.gwt.user.client.rpc.*;
064    import com.google.gwt.user.client.ui.*;
065    import com.google.gwt.user.client.ui.DockPanel.*;
066    
067    import com.google.gwt.user.client.ui.FlexTable.*;
068    import java.util.*;
069    
070    /**
071     * This class will allow the user to change his password. It
072     * does by means of a pop up dialog which will allow the user to
073     * enter his new password twice. If the passwords do not match the
074     * attempt at setting the password is rejected. 
075     * @author Craige Bevil
076     * @version $Id: ChangePasswordDialogBox.java,v 1.6 2008/01/15 11:08:16 cb Exp $
077     */
078    
079    public class ChangePasswordDialogBox extends FaultDBForm implements ClickListener {
080        
081        /**
082         * This is the submit button widget 
083         */
084        
085        final private Button SubmitButton;
086    
087        /**
088         * The user will enter his new password into this text box widget.
089         */
090        
091        final private PasswordTextBox NewPassword = new PasswordTextBox();
092    
093        /**
094         * The user will enter his new password into this text box widget.
095         */
096        
097        private PasswordTextBox PasswordConfirmation = new PasswordTextBox();
098        
099        /**
100         * This is the cancel button widget 
101         */
102        
103        final private Button CancelButton;
104        
105        /**
106         * This is the main dialog box which will be displayed 
107         */
108        
109        DialogBox ChangePasswordDialog = new DialogBox(false);
110        
111        /**
112         * This is the email address of the person that is to have his
113         * password updated
114         */
115        
116        String emailAddress; 
117    
118        /**
119         * Constructor
120         * @param svc Used to communicate with the remote servlet
121         * container. 
122         * @param emailAddress This is the email address of the person who
123         * is to have his password changed.  
124         */
125        
126        ChangePasswordDialogBox (final FaultServiceAsync svc,final String emailAddress) {
127    
128            final DockPanel panel = new DockPanel();
129            
130            this.svc          = svc;
131            this.emailAddress = emailAddress;
132    
133            final FlexTable tmp = new FlexTable();
134    
135            // Now create the field into which the user will enter his new
136            // password
137            
138            tmp.setText(0,0,internationalizationConstants.newPassword());
139            tmp.setWidget(0,1,NewPassword);
140    
141            tmp.setText(1,0,internationalizationConstants.confirmPassword());
142            tmp.setWidget(1,1,PasswordConfirmation);
143            
144            panel.add(tmp,DockPanel.NORTH);
145            
146            // Now add the submit and cancel button 
147            
148            SubmitButton = new Button(internationalizationConstants.changePassword(),this);
149            CancelButton = new Button(internationalizationConstants.cancel(),this);
150    
151            panel.add(SubmitButton,DockPanel.WEST);
152            panel.add(CancelButton,DockPanel.WEST);
153            panel.setSpacing(10);
154    
155            // Now add the main panel to the dialog box
156    
157            ChangePasswordDialog.setWidget(panel);
158    
159            ChangePasswordDialog.setText(internationalizationConstants.changePassword());
160        }   
161    
162    
163        /**
164         * This is the click handler which is called when the user calls
165         * presses one of the buttons on the dialog. It results in the
166         * process of changing the password being initiated.
167         * @param sender This is the widget which raised the event.
168         */
169        
170        public void onClick (final Widget sender) {
171            
172            if (sender.equals(SubmitButton)) {
173                
174                // Now we need to link the which was entered to the
175                // fault. First we need to check to see if the fault is
176                // actually in the fault database 
177                
178                if (NewPassword.getText().equals("") || PasswordConfirmation.getText().equals("")) {
179                    Window.alert(internationalizationConstants.allFieldsMustBeFilledIn());
180                    return;
181                }
182                
183                // Verify that both of the passwords are the same 
184    
185                if (!NewPassword.getText().equals(PasswordConfirmation.getText())) {
186                    Window.alert(internationalizationConstants.passwordMismatch());
187                    return;
188                }
189    
190                // Get the servlet to change the password w
191                
192                svc.resetPassword (emailAddress,NewPassword.getText(),new AsyncCallback() {
193                        
194                        public void onSuccess (final Object result) {
195                            ChangePasswordDialog.hide();
196                            Window.alert(internationalizationConstants.passwordHasBeenUpdated());
197                        }
198                        
199                        public void onFailure (Throwable ex) {
200                            Window.alert(internationalizationConstants.unableToUpdatePassword());
201                        }
202                    });
203                
204            } else if (sender.equals(CancelButton)) {
205                ChangePasswordDialog.hide();
206            }
207        }
208        
209        /**
210         * Displays the dialog which will allow the user to change his
211         * password. 
212         */
213        
214        public void showChangePasswordDialog () {
215            ChangePasswordDialog.show();
216            ChangePasswordDialog.center();
217            NewPassword.setFocus(true);
218        }
219    }
220