c2fa97c0c2d62de6e1813676a283133546f76d37
[pithos-web-client] / src / gr / grnet / pithos / web / client / PermissionsAddDialog.java
1 /*
2  * Copyright 2011 GRNET S.A. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or
5  * without modification, are permitted provided that the following
6  * conditions are met:
7  *
8  *   1. Redistributions of source code must retain the above
9  *      copyright notice, this list of conditions and the following
10  *      disclaimer.
11  *
12  *   2. Redistributions in binary form must reproduce the above
13  *      copyright notice, this list of conditions and the following
14  *      disclaimer in the documentation and/or other materials
15  *      provided with the distribution.
16  *
17  * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
18  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
21  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
24  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
25  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
27  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28  * POSSIBILITY OF SUCH DAMAGE.
29  *
30  * The views and conclusions contained in the software and
31  * documentation are those of the authors and should not be
32  * interpreted as representing official policies, either expressed
33  * or implied, of GRNET S.A.
34  */
35 package gr.grnet.pithos.web.client;
36
37 import gr.grnet.pithos.web.client.grouptree.Group;
38
39 import java.util.List;
40
41 import com.google.gwt.dom.client.NativeEvent;
42 import com.google.gwt.event.dom.client.ClickEvent;
43 import com.google.gwt.event.dom.client.ClickHandler;
44 import com.google.gwt.event.dom.client.KeyCodes;
45 import com.google.gwt.user.client.Event.NativePreviewEvent;
46 import com.google.gwt.user.client.ui.Anchor;
47 import com.google.gwt.user.client.ui.Button;
48 import com.google.gwt.user.client.ui.CheckBox;
49 import com.google.gwt.user.client.ui.DialogBox;
50 import com.google.gwt.user.client.ui.FlexTable;
51 import com.google.gwt.user.client.ui.HasHorizontalAlignment;
52 import com.google.gwt.user.client.ui.ListBox;
53 import com.google.gwt.user.client.ui.TextBox;
54 import com.google.gwt.user.client.ui.VerticalPanel;
55
56 public class PermissionsAddDialog extends DialogBox {
57
58         private TextBox userBox = new TextBox();
59
60         private ListBox groupBox = new ListBox();
61
62         private CheckBox read = new CheckBox();
63
64         private CheckBox write = new CheckBox();
65
66         private PermissionsList permList;
67
68         boolean userAdd;
69
70     private Pithos app;
71
72         public PermissionsAddDialog(Pithos _app, List<Group> _groups, PermissionsList _permList, boolean _userAdd) {
73         app = _app;
74                 userAdd = _userAdd;
75                 permList = _permList;
76
77                 Anchor close = new Anchor();
78                 close.addStyleName("close");
79                 close.addClickHandler(new ClickHandler() {
80                         
81                         @Override
82                         public void onClick(ClickEvent event) {
83                                 hide();
84                         }
85                 });
86                 setText("Add permission");
87                 setStyleName("pithos-DialogBox");
88
89         final VerticalPanel panel = new VerticalPanel();
90         panel.add(close);
91
92         VerticalPanel inner = new VerticalPanel();
93                 inner.addStyleName("inner");
94
95         final FlexTable permTable = new FlexTable();
96         permTable.setText(0, 0, "Users/Groups");
97         permTable.setText(0, 1, "Read");
98         permTable.setText(0, 2, "Write");
99         permTable.getFlexCellFormatter().setStyleName(0, 0, "props-toplabels");
100         permTable.getFlexCellFormatter().setStyleName(0, 1, "props-toplabels");
101         permTable.getFlexCellFormatter().setStyleName(0, 2, "props-toplabels");
102
103         if (userAdd) {
104             permTable.setWidget(1, 0, userBox);
105         }
106         else {
107             for (Group group : _groups)
108                 groupBox.addItem(group.getName(), group.getName());
109             permTable.setWidget(1, 0, groupBox);
110         }
111
112         permTable.setWidget(1, 1, read);
113         permTable.setWidget(1, 2, write);
114
115         permTable.getFlexCellFormatter().setStyleName(1, 0, "props-labels");
116         permTable.getFlexCellFormatter().setHorizontalAlignment(1, 1, HasHorizontalAlignment.ALIGN_CENTER);
117         permTable.getFlexCellFormatter().setHorizontalAlignment(1, 2, HasHorizontalAlignment.ALIGN_CENTER);
118         inner.add(permTable);
119
120         final Button ok = new Button("OK", new ClickHandler() {
121             @Override
122             public void onClick(ClickEvent event) {
123                 addPermission();
124                 hide();
125             }
126         });
127
128         ok.addStyleName("button");
129         inner.add(ok);
130
131         panel.add(inner);
132         panel.setCellHorizontalAlignment(inner, HasHorizontalAlignment.ALIGN_CENTER);
133         
134         setWidget(panel);
135         }
136
137         protected void addPermission() {
138         String selected = null;
139                 if (userAdd) {
140                         selected = userBox.getText();
141                 } else {
142                         String groupName = groupBox.getValue(groupBox.getSelectedIndex());
143             selected = app.getUsername() + ":" + groupName;
144                 }
145         if (permList.getPermissions().get(selected) != null) {
146             return;
147         }
148                 boolean readValue = read.getValue();
149                 boolean writeValue = write.getValue();
150
151                 permList.addPermission(selected, readValue, writeValue);
152         }
153
154         @Override
155         protected void onPreviewNativeEvent(NativePreviewEvent preview) {
156                 super.onPreviewNativeEvent(preview);
157
158                 NativeEvent evt = preview.getNativeEvent();
159                 if (evt.getType().equals("keydown"))
160                         // Use the popup's key preview hooks to close the dialog when either
161                         // enter or escape is pressed.
162                         switch (evt.getKeyCode()) {
163                                 case KeyCodes.KEY_ENTER:
164                                         addPermission();
165                                         hide();
166                                         break;
167                                 case KeyCodes.KEY_ESCAPE:
168                                         hide();
169                                         break;
170                         }
171         }
172
173
174         @Override
175         public void center() {
176                 super.center();
177                 if (userAdd)
178                         userBox.setFocus(true);
179         }
180 }