From 8d09767f56c9115c6ebb0b0a7fd4ef2fe8b55af2 Mon Sep 17 00:00:00 2001 From: Christos KK Loverdos Date: Fri, 1 Feb 2013 19:31:14 +0200 Subject: [PATCH] Use and show display name when sharing a file with a particular user --- .../pithos/web/client/FilePermissionsDialog.java | 2 +- .../pithos/web/client/FolderPermissionsDialog.java | 2 +- .../pithos/web/client/PermissionsAddDialog.java | 60 ++++++++++++++++---- .../grnet/pithos/web/client/PermissionsList.java | 57 +++++++++++++++---- 4 files changed, 97 insertions(+), 24 deletions(-) diff --git a/src/gr/grnet/pithos/web/client/FilePermissionsDialog.java b/src/gr/grnet/pithos/web/client/FilePermissionsDialog.java index 3cf468e..49a9a9a 100644 --- a/src/gr/grnet/pithos/web/client/FilePermissionsDialog.java +++ b/src/gr/grnet/pithos/web/client/FilePermissionsDialog.java @@ -144,7 +144,7 @@ public class FilePermissionsDialog extends AbstractPropertiesDialog { private VerticalPanel createSharingPanel() { VerticalPanel permPanel = new VerticalPanel(); - permList = new PermissionsList(images, file.getPermissions(), file.getOwnerID(), false, new Command() { + permList = new PermissionsList(app, images, file.getPermissions(), file.getOwnerID(), false, new Command() { @Override public void execute() { diff --git a/src/gr/grnet/pithos/web/client/FolderPermissionsDialog.java b/src/gr/grnet/pithos/web/client/FolderPermissionsDialog.java index 91550d7..77389e7 100644 --- a/src/gr/grnet/pithos/web/client/FolderPermissionsDialog.java +++ b/src/gr/grnet/pithos/web/client/FolderPermissionsDialog.java @@ -115,7 +115,7 @@ public class FolderPermissionsDialog extends DialogBox { VerticalPanel permPanel = new VerticalPanel(); FilePermissionsDialog.Images images = GWT.create(FilePermissionsDialog.Images.class); - permList = new PermissionsList(images, folder.getPermissions(), folder.getOwnerID(), false, null); + permList = new PermissionsList(app, images, folder.getPermissions(), folder.getOwnerID(), false, null); permPanel.add(permList); HorizontalPanel permButtons = new HorizontalPanel(); diff --git a/src/gr/grnet/pithos/web/client/PermissionsAddDialog.java b/src/gr/grnet/pithos/web/client/PermissionsAddDialog.java index 28aecef..4913fba 100644 --- a/src/gr/grnet/pithos/web/client/PermissionsAddDialog.java +++ b/src/gr/grnet/pithos/web/client/PermissionsAddDialog.java @@ -34,6 +34,11 @@ */ 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; @@ -55,6 +60,7 @@ import com.google.gwt.user.client.ui.TextBox; 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(); @@ -105,8 +111,9 @@ public class PermissionsAddDialog extends DialogBox { 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); } @@ -137,14 +144,14 @@ public class PermissionsAddDialog extends DialogBox { } 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; @@ -157,12 +164,45 @@ public class PermissionsAddDialog extends DialogBox { 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); diff --git a/src/gr/grnet/pithos/web/client/PermissionsList.java b/src/gr/grnet/pithos/web/client/PermissionsList.java index a1fa8a6..f97c958 100644 --- a/src/gr/grnet/pithos/web/client/PermissionsList.java +++ b/src/gr/grnet/pithos/web/client/PermissionsList.java @@ -34,6 +34,9 @@ */ 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; @@ -53,6 +56,8 @@ import com.google.gwt.user.client.ui.HasHorizontalAlignment; 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 { @@ -72,8 +77,11 @@ public class PermissionsList extends Composite { private boolean readonly = false; Command changePermissionsCallback; + + private final Pithos app; - public PermissionsList(final Images theImages, Map thePermissions, String theOwner, boolean inheritsPermissions, Command _changePermissionsCallback){ + public PermissionsList(Pithos app, final Images theImages, Map thePermissions, String theOwner, boolean inheritsPermissions, Command _changePermissionsCallback){ + this.app = app; changePermissionsCallback = _changePermissionsCallback; images = theImages; owner = theOwner; @@ -105,8 +113,8 @@ public class PermissionsList extends Composite { 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) @@ -119,16 +127,41 @@ public class PermissionsList extends Composite { */ void updatePermissionTable(){ int i = 1; + final int ii = i; for (int j=1; j" + AbstractImagePrototype.create(images.permUser()).getHTML() + " " + user + ""); - else - permTable.setHTML(i, 0, "" + AbstractImagePrototype.create(images.permGroup()).getHTML() + " " + user.split(":")[1].trim() + ""); + 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, + "" + AbstractImagePrototype.create(images.permUser()).getHTML() + " " + displayName + "" + ); + } + 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, + "" + AbstractImagePrototype.create(images.permUser()).getHTML() + " " + displayName + "" + ); + } + }.scheduleDeferred(); + } + } + else { + permTable.setHTML(i, 0, "" + AbstractImagePrototype.create(images.permGroup()).getHTML() + " " + userID.split(":")[1].trim() + ""); + } 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]; @@ -146,7 +179,7 @@ public class PermissionsList extends Composite { read.addValueChangeHandler(new ValueChangeHandler() { @Override public void onValueChange(ValueChangeEvent booleanValueChangeEvent) { - Boolean[] ps = permissions.get(user); + Boolean[] ps = permissions.get(userID); ps[0] = booleanValueChangeEvent.getValue(); ps[1] = !booleanValueChangeEvent.getValue(); hasChanges = true; @@ -157,7 +190,7 @@ public class PermissionsList extends Composite { write.addValueChangeHandler(new ValueChangeHandler() { @Override public void onValueChange(ValueChangeEvent booleanValueChangeEvent) { - Boolean[] ps = permissions.get(user); + Boolean[] ps = permissions.get(userID); ps[0] = !booleanValueChangeEvent.getValue(); ps[1] = booleanValueChangeEvent.getValue(); hasChanges = true; @@ -170,7 +203,7 @@ public class PermissionsList extends Composite { removeButton.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { - permissions.remove(user); + permissions.remove(userID); updatePermissionTable(); hasChanges = true; if (changePermissionsCallback != null) -- 1.7.10.4