/*
- * Copyright 2011-2012 GRNET S.A. All rights reserved.
+ * Copyright 2011-2013 GRNET S.A. All rights reserved.
*
* Redistribution and use in source and binary forms, with or
* without modification, are permitted provided that the following
*/
package gr.grnet.pithos.web.client;
+import gr.grnet.pithos.web.client.catalog.UpdateUserCatalogs;
+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.Event.NativePreviewEvent;
import com.google.gwt.user.client.ui.Anchor;
import com.google.gwt.user.client.ui.Button;
-import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.DialogBox;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
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.getUsername() + ":" + groupName;
+ selected = app.getUserID() + ":" + groupName;
}
if (permList.getPermissions().get(selected) != null) {
return;
}
- if (selected == null || selected.length() == 0 || selected.equals(app.getUsername() + ":")) {
+ if (selected == null || selected.length() == 0 || selected.equals(app.getUserID() + ":")) {
app.displayWarning("You have to select a username or group");
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.getIDForUserDisplayName(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 UpdateUserCatalogs(app, null, Helpers.toList(userDisplayName)) {
+ @Override
+ public void onSuccess(UserCatalogs requestedUserCatalogs, UserCatalogs updatedUserCatalogs) {
+ final String userID = updatedUserCatalogs.getID(userDisplayName);
+ if(userID == null) {
+ Pithos.LOG("PermissionsDialog::addUserPermission(), UpdateUserCatalogs() => Unknown user ", userDisplayName);
+ app.displayWarning("Unknown user " + userDisplayName);
+ }
+ else if(!alreadyHasPermission(userID)) {
+ permList.addPermission(userID, readValue, writeValue);
+ }
+ }
+ }.scheduleDeferred();
+ }
+ }
+
@Override
protected void onPreviewNativeEvent(NativePreviewEvent preview) {
super.onPreviewNativeEvent(preview);