New button "Add everybody" to file Share dialog
[pithos-web-client] / src / gr / grnet / pithos / web / client / PermissionsAddDialog.java
index dd7e052..6ebca4f 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * 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
@@ -34,6 +34,8 @@
  */
 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;
@@ -46,7 +48,6 @@ import com.google.gwt.regexp.shared.RegExp;
 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;
@@ -56,6 +57,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();
 
@@ -106,8 +108,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);
         }
                 
@@ -138,32 +141,65 @@ 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.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);