001    /** =====================================================================       
002    *
003    *  File Name : $Id: LinkFaultDialog.java,v 1.5 2007/12/17 10:34:56 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: LinkFaultDialog.java,v 1.5 2007/12/17 10:34:56 cb Exp $
030    *
031    *     @author    : $Author: cb $
032    *
033    *     Header     : $Header: /opt/INGsrc/src/CVS/softproj/FaultDatabase/src/FaultDatabase/FaultDatabase/src/GWTApplication/client/LinkFaultDialog.java,v 1.5 2007/12/17 10:34:56 cb Exp $
034    *
035    *     Log        : $Log: LinkFaultDialog.java,v $
036    *     Log        : Revision 1.5  2007/12/17 10:34:56  cb
037    *     Log        : Removed a problem wherby the use of the fancy js library could lock
038    *     Log        : the screen. Ensure that the link field has the focus when the dialog
039    *     Log        : is displayed.
040    *     Log        :
041    *     Log        : Revision 1.4  2007/12/12 15:26:14  cb
042    *     Log        : Added new javascript library which allows fancy message boxes to be
043    *     Log        : displayed.
044    *     Log        :
045    *     Log        : Revision 1.3  2007/09/04 13:26:01  cb
046    *     Log        : Removed the dialog which says that the link has been made because it
047    *     Log        : was interferring with the thread which performs the update of the
048    *     Log        : faults (I think).
049    *     Log        :
050    *     Log        : Revision 1.2  2007/08/17 14:26:42  cb
051    *     Log        : Updated for lastest prototype incorporating a lot of Nikos comments
052    *     Log        :
053    *     Log        : Revision 1.1  2007/07/24 08:27:09  cb
054    *     Log        : First version
055    *     Log        :
056    *
057    * =====================================================================*/
058    
059    package GWTApplication.client;
060    
061    import com.google.gwt.user.client.*;
062    import com.google.gwt.user.client.rpc.*;
063    import com.google.gwt.user.client.ui.*;
064    import com.google.gwt.user.client.ui.DockPanel.*;
065    
066    import com.google.gwt.user.client.ui.FlexTable.*;
067    import java.util.*;
068    
069    /**
070     * This class will allow the user to link a fault to another fault. It
071     * does by means of a pop up dialog which will be displayed when the
072     * user clicks on the appropriate link on the interface 
073     * @author Craige Bevil
074     * @version $Id: LinkFaultDialog.java,v 1.5 2007/12/17 10:34:56 cb Exp $
075     */
076    
077    public class LinkFaultDialog extends FaultDBForm implements ClickListener {
078        
079        /**
080         * This is the submit button widget 
081         */
082        
083        final private Button SubmitButton;
084    
085        /**
086         * This is the cancel button widget 
087         */
088        
089        final private Button CancelButton;
090        
091        /**
092         * This is the main dialog box which will be displayed 
093         */
094        
095        DialogBox LinkDialog = new DialogBox(false);
096        
097        /**
098         * This is the fault id of the child fault which we will link to
099         * parent fault which will be entered by the user
100         */
101        
102        private int ChildFaultId;
103    
104        /**
105         * This is the entry box into which the user will enter the id of
106         * the fault to which this fault will be linked to
107         */
108    
109        private LabelTextBox ParentLinkTextEntry;
110        
111        /**
112         * Constructor
113         */
114        
115        LinkFaultDialog (final FaultServiceAsync svc) {
116    
117            final DockPanel panel = new DockPanel();
118            
119            this.svc = svc;
120    
121            ParentLinkTextEntry = new LabelTextBox(LabelTextBox.HORIZONTAL);
122            
123            ParentLinkTextEntry.label.setText(internationalizationConstants.faultToLinkTo() + ":");
124            ParentLinkTextEntry.textBox.setWidth("5cm");
125    
126            panel.add(ParentLinkTextEntry,DockPanel.NORTH);
127            
128            // Now add the submit and cancel button 
129            
130            SubmitButton = new Button(internationalizationConstants.linkFault(),this);
131            CancelButton = new Button(internationalizationConstants.cancel(),this);
132    
133            panel.add(SubmitButton,DockPanel.WEST);
134            panel.add(CancelButton,DockPanel.WEST);
135            panel.setSpacing(10);
136    
137            // Now add the main panel to the dialog box
138    
139            LinkDialog.setWidget(panel);
140    
141            LinkDialog.setText(internationalizationConstants.linkFault());
142        }   
143    
144        /**
145         * This is the click handler which is called when the user calls
146         * presses one of the buttons on the dialog
147         * @param sender This is the widget which resulted in the event
148         * being generated.
149         */
150        
151        public void onClick (final Widget sender) {
152            
153            if (sender.equals(SubmitButton)) {
154                
155                // Now we need to link the which was entered to the
156                // fault. First we need to check to see if the fault is
157                // actually in the fault database 
158                
159                if (!ParentLinkTextEntry.textBox.getText().matches("[0-9]+")) {
160                    Window.alert(internationalizationConstants.defectNumberNotSpecifiedCorrectly());
161                    return;
162                }
163    
164                final int parentFaultId = Integer.parseInt(ParentLinkTextEntry.textBox.getText());
165    
166                // If the user is trying to link the fault to itself then
167                // have a word
168                
169                if (parentFaultId == ChildFaultId) {
170                    Window.alert("You cannot link a fault to itself");
171                    return;
172                }
173                
174                svc.linkFault (parentFaultId,ChildFaultId,new AsyncCallback() {
175                        
176                        /**
177                         * On success we remove the dialog from the
178                         * display and report that we were successful to
179                         * the user
180                         */
181                        
182                        public void onSuccess (final Object result) {
183                            
184                            LinkDialog.hide();
185                        }
186                        
187                        public void onFailure (Throwable ex)
188                        {
189                            Window.alert(internationalizationConstants.unableToMakeLink());
190                        }
191                    });
192                
193            } else if (sender.equals(CancelButton)) {
194                LinkDialog.hide();
195            }
196        }
197        
198        /**
199         * Displays the new dialog which will allow the user to link this
200         * fault with the fault specified.
201         *
202         * @param ChildFaultId This is the id. of the fault which we will link
203         * to the fault entered by the user should be linked to
204         */
205        
206        public void showLinkDialog (final int ChildFaultId) {
207    
208            this.ChildFaultId = ChildFaultId;
209    
210            LinkDialog.show();
211            LinkDialog.center();
212    
213            ParentLinkTextEntry.setFocus(true);
214                    
215        }
216    }
217