*/
package gr.grnet.pithos.web.client;
+import com.google.gwt.http.client.Request;
+import com.google.gwt.http.client.Response;
+import com.google.gwt.json.client.JSONObject;
+import gr.grnet.pithos.web.client.catalog.GetUserCatalogs;
+import gr.grnet.pithos.web.client.catalog.UserCatalogs;
import gr.grnet.pithos.web.client.grouptree.Group;
import java.util.List;
import com.google.gwt.user.client.ui.VerticalPanel;
public class PermissionsAddDialog extends DialogBox {
+ final static RegExp EmailValidator = RegExp.compile("^[A-Z0-9._%+-]+@[A-Z0-9.-]+[.][A-Z]{2,4}$", "i");
private TextBox userBox = new TextBox();
permTable.setWidget(1, 0, userBox);
}
else {
- for (Group group : _groups)
+ for (Group group : _groups) {
groupBox.addItem(group.getName(), group.getName());
+ }
permTable.setWidget(1, 0, groupBox);
}
}
protected void addPermission() {
+ final boolean readValue = read.getValue();
+ final boolean writeValue = write.getValue();
+
String selected = null;
if (userAdd) {
- selected = userBox.getText().trim();
- RegExp emailValidator = RegExp.compile("^[A-Z0-9._%+-]+@[A-Z0-9.-]+[.][A-Z]{2,4}$", "i");
- if (!emailValidator.test(selected)) {
- app.displayWarning("Username must be a valid email address");
- return;
- }
+ final String userDisplayName = userBox.getText().trim();
+ addUserPermission(userDisplayName, readValue, writeValue);
+ return;
} else if (groupBox.getSelectedIndex() > -1) {
String groupName = groupBox.getValue(groupBox.getSelectedIndex());
selected = app.getUserID() + ":" + groupName;
return;
}
- boolean readValue = read.getValue();
- boolean writeValue = write.getValue();
-
permList.addPermission(selected, readValue, writeValue);
}
+ private boolean alreadyHasPermission(String selected) {
+ return permList.getPermissions().get(selected) != null;
+ }
+
+ private void addUserPermission(final String userDisplayName, final boolean readValue, final boolean writeValue) {
+ if (!EmailValidator.test(userDisplayName)) {
+ app.displayWarning("Username must be a valid email address");
+ return;
+ }
+
+ // Now get the userID
+ final String userID = app.getUserIDForDisplayName(userDisplayName);
+ if(userID != null) {
+ // Check if already have the permission
+ if(!alreadyHasPermission(userID)) {
+ permList.addPermission(userID, readValue, writeValue);
+ }
+ }
+ else {
+ // Must call server to obtain userID
+ new GetUserCatalogs(app, null, Helpers.toList(userDisplayName)) {
+ @Override
+ public void onSuccess(Request request, Response response, JSONObject result, UserCatalogs userCatalogs) {
+ app.getUserCatalogs().updateFrom(userCatalogs);
+ final String userID = app.getUserIDForDisplayName(userDisplayName);
+ if(userID == null) {
+ app.displayWarning("Unknown user " + userDisplayName);
+ }
+ else if(!alreadyHasPermission(userID)) {
+ permList.addPermission(userID, readValue, writeValue);
+ }
+ }
+ }.scheduleDeferred();
+ }
+ }
+
@Override
protected void onPreviewNativeEvent(NativePreviewEvent preview) {
super.onPreviewNativeEvent(preview);
*/
package gr.grnet.pithos.web.client;
+import com.google.gwt.http.client.Request;
+import com.google.gwt.http.client.Response;
+import com.google.gwt.json.client.JSONObject;
import gr.grnet.pithos.web.client.FilePermissionsDialog.Images;
import java.util.HashMap;
import com.google.gwt.user.client.ui.PushButton;
import com.google.gwt.user.client.ui.RadioButton;
import com.google.gwt.user.client.ui.VerticalPanel;
+import gr.grnet.pithos.web.client.catalog.GetUserCatalogs;
+import gr.grnet.pithos.web.client.catalog.UserCatalogs;
public class PermissionsList extends Composite {
private boolean readonly = false;
Command changePermissionsCallback;
+
+ private final Pithos app;
- public PermissionsList(final Images theImages, Map<String, Boolean[]> thePermissions, String theOwner, boolean inheritsPermissions, Command _changePermissionsCallback){
+ public PermissionsList(Pithos app, final Images theImages, Map<String, Boolean[]> thePermissions, String theOwner, boolean inheritsPermissions, Command _changePermissionsCallback){
+ this.app = app;
changePermissionsCallback = _changePermissionsCallback;
images = theImages;
owner = theOwner;
return permissions;
}
- public void addPermission(String user, boolean read, boolean write){
- permissions.put(user, new Boolean[] {Boolean.valueOf(read), Boolean.valueOf(write)});
+ public void addPermission(String userID, boolean read, boolean write){
+ permissions.put(userID, new Boolean[] {Boolean.valueOf(read), Boolean.valueOf(write)});
hasChanges = true;
updatePermissionTable();
if (changePermissionsCallback != null)
*/
void updatePermissionTable(){
int i = 1;
+ final int ii = i;
for (int j=1; j<permTable.getRowCount(); j++)
permTable.removeRow(j);
- for(final String user : permissions.keySet()) {
- if (!user.contains(":")) //not a group
- permTable.setHTML(i, 0, "<span>" + AbstractImagePrototype.create(images.permUser()).getHTML() + " " + user + "</span>");
- else
- permTable.setHTML(i, 0, "<span>" + AbstractImagePrototype.create(images.permGroup()).getHTML() + " " + user.split(":")[1].trim() + "</span>");
+ for(final String userID : permissions.keySet()) {
+ if (!userID.contains(":")) {
+ //not a group
+ final String displayName = app.getUserDisplayNameForID(userID);
+ if(displayName != null) {
+ permTable.setHTML(
+ i,
+ 0,
+ "<span>" + AbstractImagePrototype.create(images.permUser()).getHTML() + " " + displayName + "</span>"
+ );
+ }
+ else {
+ new GetUserCatalogs(app, userID) {
+ @Override
+ public void onSuccess(Request request, Response response, JSONObject result, UserCatalogs userCatalogs) {
+ app.getUserCatalogs().updateFrom(userCatalogs);
+ final String displayName = app.getUserDisplayNameForID(userID);
+ permTable.setHTML(
+ ii,
+ 0,
+ "<span>" + AbstractImagePrototype.create(images.permUser()).getHTML() + " " + displayName + "</span>"
+ );
+ }
+ }.scheduleDeferred();
+ }
+ }
+ else {
+ permTable.setHTML(i, 0, "<span>" + AbstractImagePrototype.create(images.permGroup()).getHTML() + " " + userID.split(":")[1].trim() + "</span>");
+ }
permTable.getFlexCellFormatter().setStyleName(i, 0, "props-values");
- Boolean[] userPerms = permissions.get(user);
+ Boolean[] userPerms = permissions.get(userID);
Boolean readP = userPerms[0];
Boolean writeP = userPerms[1];
read.addValueChangeHandler(new ValueChangeHandler<Boolean>() {
@Override
public void onValueChange(ValueChangeEvent<Boolean> booleanValueChangeEvent) {
- Boolean[] ps = permissions.get(user);
+ Boolean[] ps = permissions.get(userID);
ps[0] = booleanValueChangeEvent.getValue();
ps[1] = !booleanValueChangeEvent.getValue();
hasChanges = true;
write.addValueChangeHandler(new ValueChangeHandler<Boolean>() {
@Override
public void onValueChange(ValueChangeEvent<Boolean> booleanValueChangeEvent) {
- Boolean[] ps = permissions.get(user);
+ Boolean[] ps = permissions.get(userID);
ps[0] = !booleanValueChangeEvent.getValue();
ps[1] = booleanValueChangeEvent.getValue();
hasChanges = true;
removeButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
- permissions.remove(user);
+ permissions.remove(userID);
updatePermissionTable();
hasChanges = true;
if (changePermissionsCallback != null)