96f3a8020b67c95cb9b17ea01b244424f04ecb66
[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 com.google.gwt.user.client.ui.TextBox;
38
39 import gr.grnet.pithos.web.client.grouptree.Group;
40
41 import java.util.List;
42
43 import com.google.gwt.dom.client.NativeEvent;
44 import com.google.gwt.event.dom.client.ClickEvent;
45 import com.google.gwt.event.dom.client.ClickHandler;
46 import com.google.gwt.event.dom.client.KeyCodes;
47 import com.google.gwt.user.client.Event.NativePreviewEvent;
48 import com.google.gwt.user.client.ui.Anchor;
49 import com.google.gwt.user.client.ui.Button;
50 import com.google.gwt.user.client.ui.CheckBox;
51 import com.google.gwt.user.client.ui.DialogBox;
52 import com.google.gwt.user.client.ui.FlexTable;
53 import com.google.gwt.user.client.ui.HasHorizontalAlignment;
54 import com.google.gwt.user.client.ui.HorizontalPanel;
55 import com.google.gwt.user.client.ui.ListBox;
56 import com.google.gwt.user.client.ui.VerticalPanel;
57
58 public class PermissionsAddDialog extends DialogBox {
59
60         private TextBox userBox = new TextBox();
61
62         private ListBox groupBox = new ListBox();
63
64         private CheckBox read = new CheckBox();
65
66         private CheckBox write = new CheckBox();
67
68         private PermissionsList permList;
69
70         boolean userAdd;
71
72     private Pithos app;
73
74         public PermissionsAddDialog(Pithos _app, List<Group> _groups, PermissionsList _permList, boolean _userAdd) {
75         app = _app;
76                 userAdd = _userAdd;
77                 permList = _permList;
78
79                 Anchor close = new Anchor();
80                 close.addStyleName("close");
81                 close.addClickHandler(new ClickHandler() {
82                         
83                         @Override
84                         public void onClick(ClickEvent event) {
85                                 hide();
86                         }
87                 });
88                 setText("Add permission");
89                 setStyleName("pithos-DialogBox");
90
91         final VerticalPanel panel = new VerticalPanel();
92         panel.add(close);
93
94         VerticalPanel inner = new VerticalPanel();
95                 inner.addStyleName("inner");
96
97         final FlexTable permTable = new FlexTable();
98         permTable.setText(0, 0, "Users/Groups");
99         permTable.setText(0, 1, "Read");
100         permTable.setText(0, 2, "Write");
101         permTable.getFlexCellFormatter().setStyleName(0, 0, "props-toplabels");
102         permTable.getFlexCellFormatter().setStyleName(0, 1, "props-toplabels");
103         permTable.getFlexCellFormatter().setStyleName(0, 2, "props-toplabels");
104
105         if (userAdd) {
106             permTable.setWidget(1, 0, userBox);
107         }
108         else {
109             for (Group group : _groups)
110                 groupBox.addItem(group.getName(), group.getName());
111             permTable.setWidget(1, 0, groupBox);
112         }
113
114         permTable.setWidget(1, 1, read);
115         permTable.setWidget(1, 2, write);
116
117         permTable.getFlexCellFormatter().setStyleName(1, 0, "props-labels");
118         permTable.getFlexCellFormatter().setHorizontalAlignment(1, 1, HasHorizontalAlignment.ALIGN_CENTER);
119         permTable.getFlexCellFormatter().setHorizontalAlignment(1, 2, HasHorizontalAlignment.ALIGN_CENTER);
120         inner.add(permTable);
121
122         final Button ok = new Button("OK", new ClickHandler() {
123             @Override
124             public void onClick(@SuppressWarnings("unused") ClickEvent event) {
125                 addPermission();
126                 hide();
127             }
128         });
129
130         ok.addStyleName("button");
131         inner.add(ok);
132
133         panel.add(inner);
134         panel.setCellHorizontalAlignment(inner, HasHorizontalAlignment.ALIGN_CENTER);
135         
136         setWidget(panel);
137         }
138
139         protected void addPermission() {
140         String selected = null;
141                 if (userAdd) {
142                         selected = userBox.getText();
143                 } else {
144                         String groupName = groupBox.getValue(groupBox.getSelectedIndex());
145             selected = app.getUsername() + ":" + groupName;
146                 }
147         if (permList.getPermissions().get(selected) != null) {
148             return;
149         }
150                 boolean readValue = read.getValue();
151                 boolean writeValue = write.getValue();
152
153                 permList.addPermission(selected, readValue, writeValue);
154         }
155
156         @Override
157         protected void onPreviewNativeEvent(NativePreviewEvent preview) {
158                 super.onPreviewNativeEvent(preview);
159
160                 NativeEvent evt = preview.getNativeEvent();
161                 if (evt.getType().equals("keydown"))
162                         // Use the popup's key preview hooks to close the dialog when either
163                         // enter or escape is pressed.
164                         switch (evt.getKeyCode()) {
165                                 case KeyCodes.KEY_ENTER:
166                                         addPermission();
167                                         hide();
168                                         break;
169                                 case KeyCodes.KEY_ESCAPE:
170                                         hide();
171                                         break;
172                         }
173         }
174
175
176         @Override
177         public void center() {
178                 super.center();
179                 if (userAdd)
180                         userBox.setFocus(true);
181         }
182 }