Use and show display name when sharing a file with a particular user
authorChristos KK Loverdos <loverdos@gmail.com>
Fri, 1 Feb 2013 17:31:14 +0000 (19:31 +0200)
committerChristos KK Loverdos <loverdos@gmail.com>
Fri, 1 Feb 2013 17:31:14 +0000 (19:31 +0200)
src/gr/grnet/pithos/web/client/FilePermissionsDialog.java
src/gr/grnet/pithos/web/client/FolderPermissionsDialog.java
src/gr/grnet/pithos/web/client/PermissionsAddDialog.java
src/gr/grnet/pithos/web/client/PermissionsList.java

index 3cf468e..49a9a9a 100644 (file)
@@ -144,7 +144,7 @@ public class FilePermissionsDialog extends AbstractPropertiesDialog {
     private VerticalPanel createSharingPanel() {\r
         VerticalPanel permPanel = new VerticalPanel();\r
 \r
-        permList = new PermissionsList(images, file.getPermissions(), file.getOwnerID(), false, new Command() {\r
+        permList = new PermissionsList(app, images, file.getPermissions(), file.getOwnerID(), false, new Command() {\r
                        \r
                        @Override\r
                        public void execute() {\r
index 91550d7..77389e7 100644 (file)
@@ -115,7 +115,7 @@ public class FolderPermissionsDialog extends DialogBox {
 \r
         VerticalPanel permPanel = new VerticalPanel();\r
         FilePermissionsDialog.Images images = GWT.create(FilePermissionsDialog.Images.class);\r
-        permList = new PermissionsList(images, folder.getPermissions(), folder.getOwnerID(), false, null);\r
+        permList = new PermissionsList(app, images, folder.getPermissions(), folder.getOwnerID(), false, null);\r
         permPanel.add(permList);\r
 \r
         HorizontalPanel permButtons = new HorizontalPanel();\r
index 28aecef..4913fba 100644 (file)
  */
 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);
index a1fa8a6..f97c958 100644 (file)
@@ -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<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;
@@ -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<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() + "&nbsp;" + user + "</span>");
-            else
-                permTable.setHTML(i, 0, "<span>" + AbstractImagePrototype.create(images.permGroup()).getHTML() + "&nbsp;" + 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() + "&nbsp;" + 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() + "&nbsp;" + displayName + "</span>"
+                            );
+                        }
+                    }.scheduleDeferred();
+                }
+            }
+            else {
+                permTable.setHTML(i, 0, "<span>" + AbstractImagePrototype.create(images.permGroup()).getHTML() + "&nbsp;" + 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];
 
@@ -146,7 +179,7 @@ public class PermissionsList extends Composite {
                 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;
@@ -157,7 +190,7 @@ public class PermissionsList extends Composite {
                 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;
@@ -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)