moved towards gwt version 2.0 - updated dnd to version 3 -removed all deprecations
[pithos] / src / gr / ebs / gss / client / DeleteUserDialog.java
1 /*
2  * Copyright 2008, 2009 Electronic Business Systems Ltd.
3  *
4  * This file is part of GSS.
5  *
6  * GSS is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation, either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * GSS is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with GSS.  If not, see <http://www.gnu.org/licenses/>.
18  */
19 package gr.ebs.gss.client;
20
21 import gr.ebs.gss.client.MessagePanel.Images;
22 import gr.ebs.gss.client.rest.DeleteCommand;
23 import gr.ebs.gss.client.rest.RestException;
24 import gr.ebs.gss.client.rest.resource.GroupUserResource;
25
26 import com.google.gwt.core.client.GWT;
27 import com.google.gwt.dom.client.NativeEvent;
28 import com.google.gwt.event.dom.client.ClickEvent;
29 import com.google.gwt.event.dom.client.ClickHandler;
30 import com.google.gwt.event.dom.client.KeyCodes;
31 import com.google.gwt.user.client.DeferredCommand;
32 import com.google.gwt.user.client.Event.NativePreviewEvent;
33 import com.google.gwt.user.client.ui.AbstractImagePrototype;
34 import com.google.gwt.user.client.ui.Button;
35 import com.google.gwt.user.client.ui.DialogBox;
36 import com.google.gwt.user.client.ui.HTML;
37 import com.google.gwt.user.client.ui.HasHorizontalAlignment;
38 import com.google.gwt.user.client.ui.HorizontalPanel;
39 import com.google.gwt.user.client.ui.TreeItem;
40 import com.google.gwt.user.client.ui.VerticalPanel;
41
42
43 /**
44  * @author kman
45  *
46  */
47 public class DeleteUserDialog extends DialogBox {
48
49         /**
50          * The widget's constructor.
51          * @param images the supplied images
52          */
53         public DeleteUserDialog(final Images images) {
54                 // Use this opportunity to set the dialog's caption.
55                 setText("Delete user");
56                 setAnimationEnabled(true);
57                 final GroupUserResource group = (GroupUserResource) GSS.get().getCurrentSelection();
58                 // Create a VerticalPanel to contain the 'about' label and the 'OK'
59                 // button.
60                 final VerticalPanel outer = new VerticalPanel();
61                 final HorizontalPanel buttons = new HorizontalPanel();
62
63                 // Create the 'about' text and set a style name so we can style it with
64                 // CSS.
65                 final HTML text = new HTML("<table><tr><td>" + AbstractImagePrototype.create(images.warn()).getHTML() + "</td><td>" + "Are you sure you want to remove user '" + group.getName() + "'?</td></tr></table>");
66                 text.setStyleName("gss-warnMessage");
67                 outer.add(text);
68
69                 // Create the 'Quit' button, along with a listener that hides the dialog
70                 // when the button is clicked and quits the application.
71                 final Button ok = new Button("OK", new ClickHandler() {
72                         @Override
73                         public void onClick(ClickEvent event) {
74                                 deleteUser();
75                                 hide();
76                         }
77                 });
78                 buttons.add(ok);
79                 buttons.setCellHorizontalAlignment(ok, HasHorizontalAlignment.ALIGN_CENTER);
80                 // Create the 'Cancel' button, along with a listener that hides the
81                 // dialog
82                 // when the button is clicked.
83                 final Button cancel = new Button("Cancel", new ClickHandler() {
84                         @Override
85                         public void onClick(ClickEvent event) {
86                                 hide();
87                         }
88                 });
89                 buttons.add(cancel);
90                 buttons.setCellHorizontalAlignment(cancel, HasHorizontalAlignment.ALIGN_CENTER);
91                 buttons.setSpacing(8);
92                 buttons.setStyleName("gss-warnMessage");
93                 outer.setStyleName("gss-warnMessage");
94                 outer.add(buttons);
95                 outer.setCellHorizontalAlignment(text, HasHorizontalAlignment.ALIGN_CENTER);
96                 outer.setCellHorizontalAlignment(buttons, HasHorizontalAlignment.ALIGN_CENTER);
97                 setWidget(outer);
98         }
99
100         /**
101          * Generate an RPC request to delete a group.
102          *
103          * @param userId the ID of the current user
104          */
105         private void deleteUser() {
106                 final TreeItem user = GSS.get().getGroups().getCurrent();
107                 final TreeItem group = user.getParentItem();
108                 if (group == null) {
109                         GSS.get().displayError("No user was selected!");
110                         return;
111                 }
112                 final GroupUserResource memberR = (GroupUserResource) user.getUserObject();
113                 DeleteCommand du = new DeleteCommand(memberR.getUri()){
114
115                         @Override
116                         public void onComplete() {
117                                 GSS.get().getGroups().updateGroups();
118                         }
119
120                         @Override
121                         public void onError(Throwable t) {
122                                 GWT.log("", t);
123                                 if(t instanceof RestException){
124                                         int statusCode = ((RestException)t).getHttpStatusCode();
125                                         if(statusCode == 405)
126                                                 GSS.get().displayError("You don't have the necessary permissions");
127                                         else if(statusCode == 404)
128                                                 GSS.get().displayError("User not found");
129                                         else
130                                                 GSS.get().displayError("Unable to delete user:"+((RestException)t).getHttpStatusText());
131                                 }
132                                 else
133                                         GSS.get().displayError("System error unable to delete user:"+t.getMessage());
134                         }
135                 };
136                 DeferredCommand.addCommand(du);
137
138         }
139
140         @Override
141         protected void onPreviewNativeEvent(NativePreviewEvent preview) {
142                 super.onPreviewNativeEvent(preview);
143
144                 NativeEvent evt = preview.getNativeEvent();
145                 if (evt.getType().equals("keydown"))
146                 // Use the popup's key preview hooks to close the dialog when either
147                 // enter or escape is pressed.
148                 switch (evt.getKeyCode()) {
149                         case KeyCodes.KEY_ENTER:
150                                 hide();
151                                 deleteUser();
152                                 break;
153                         case KeyCodes.KEY_ESCAPE:
154                                 hide();
155                                 break;
156                 }
157         }
158
159 }
160