import com.google.gwt.http.client.URL;\r
import com.google.gwt.user.client.Event.NativePreviewEvent;\r
import com.google.gwt.user.client.ui.*;\r
+import gr.grnet.pithos.web.client.catalog.UpdateUserCatalogs;\r
+import gr.grnet.pithos.web.client.catalog.UserCatalogs;\r
import gr.grnet.pithos.web.client.grouptree.Group;\r
import gr.grnet.pithos.web.client.rest.PostRequest;\r
import gr.grnet.pithos.web.client.rest.RestException;\r
\r
+import java.util.Arrays;\r
+\r
/**\r
* The 'Folder properties' dialog box implementation.\r
*/\r
/**\r
* The widget that holds the folderName of the folder.\r
*/\r
- TextBox userName = new TextBox();\r
+ TextBox userNameInput = new TextBox();\r
\r
final VerticalPanel inner;\r
\r
FlexTable generalTable = new FlexTable();\r
generalTable.setText(0, 0, "Username");\r
\r
- generalTable.setWidget(0, 1, userName);\r
+ generalTable.setWidget(0, 1, userNameInput);\r
\r
generalTable.getFlexCellFormatter().setStyleName(0, 0, "props-labels");\r
generalTable.getFlexCellFormatter().setStyleName(0, 1, "props-values");\r
@Override\r
public void center() {\r
super.center();\r
- userName.setFocus(true);\r
+ userNameInput.setFocus(true);\r
}\r
\r
@Override\r
hide();\r
}\r
\r
- /**\r
- * Generate an RPC request to create a new folder.\r
- */\r
- void addUser() {\r
- String name = userName.getText().trim();\r
- if(name.length() == 0) {\r
- return;\r
- }\r
- if(!Const.EMAIL_REGEX.test(name)) {\r
- app.displayWarning("Username must be a valid email address");\r
- return;\r
- }\r
-\r
- group.addMember(name);\r
+ private void doAddUser(final String userID) {\r
+ group.addMember(userID);\r
String path = "?update=";\r
PostRequest updateGroup = new PostRequest(app.getApiPath(), app.getUserID(), path) {\r
\r
updateGroup.setHeader(Const.X_ACCOUNT_GROUP_ + URL.encodePathSegment(group.getName()), groupMembers);\r
Scheduler.get().scheduleDeferred(updateGroup);\r
}\r
+ /**\r
+ * Generate an RPC request to create a new folder.\r
+ */\r
+ void addUser() {\r
+ final String userDisplayName = userNameInput.getText().trim();\r
+ if(userDisplayName.length() == 0) {\r
+ return;\r
+ }\r
+ if(!Const.EMAIL_REGEX.test(userDisplayName)) {\r
+ app.displayWarning("Username must be a valid email address");\r
+ return;\r
+ }\r
+\r
+ if(app.hasIDForUserDisplayName(userDisplayName)) {\r
+ final String userID = app.getIDForUserDisplayName(userDisplayName);\r
+ doAddUser(userID);\r
+ }\r
+ else {\r
+ new UpdateUserCatalogs(app, null, Arrays.asList(userDisplayName)) {\r
+ @Override\r
+ public void onSuccess(UserCatalogs requestedUserCatalogs, UserCatalogs updatedUserCatalogs) {\r
+ final String userID = app.getIDForUserDisplayName(userDisplayName);\r
+ doAddUser(userID);\r
+ }\r
+ }.scheduleDeferred();\r
+ }\r
+\r
+\r
+ }\r
}\r
}\r
\r
final String ownerID = file.getOwnerID();\r
- final String displayName = app.getUserDisplayNameForID(ownerID);\r
+ final String displayName = app.getDisplayNameForUserID(ownerID);\r
final String ownerDisplayName;\r
if(displayName == null) {\r
// FIXME: Get the actual display name and do not use the id\r
}\r
else {\r
final String ownerID = folder.getOwnerID();\r
- final String displayName = app.getUserDisplayNameForID(ownerID);\r
+ final String displayName = app.getDisplayNameForUserID(ownerID);\r
final String ownerDisplayName;\r
if(displayName == null) {\r
// FIXME: Get the actual display name and do not use the id\r
*/
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.UpdateUserCatalogs;
import gr.grnet.pithos.web.client.catalog.UserCatalogs;
import gr.grnet.pithos.web.client.grouptree.Group;
}
// Now get the userID
- final String userID = app.getUserIDForDisplayName(userDisplayName);
+ final String userID = app.getIDForUserDisplayName(userDisplayName);
if(userID != null) {
// Check if already have the permission
if(!alreadyHasPermission(userID)) {
new UpdateUserCatalogs(app, null, Helpers.toList(userDisplayName)) {
@Override
public void onSuccess(UserCatalogs requestedUserCatalogs, UserCatalogs updatedUserCatalogs) {
- final String userID = updatedUserCatalogs.getUserID(userDisplayName);
+ final String userID = updatedUserCatalogs.getID(userDisplayName);
if(userID == null) {
app.displayWarning("Unknown user " + userDisplayName);
}
*/
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.Command;
import com.google.gwt.user.client.ui.AbstractImagePrototype;
import com.google.gwt.user.client.ui.Anchor;
-import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FlexTable;
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.UpdateUserCatalogs;
import gr.grnet.pithos.web.client.catalog.UserCatalogs;
for(final String userID : permissions.keySet()) {
if (!userID.contains(":")) {
//not a group
- final String displayName = app.getUserDisplayNameForID(userID);
+ final String displayName = app.getDisplayNameForUserID(userID);
if(displayName != null) {
permTable.setHTML(
i,
return displayName == null ? getUserID() : displayName;
}
- public boolean hasUserDisplayNameForID(String userID) {
+ public boolean hasDisplayNameForUserID(String userID) {
return userCatalogs.getDisplayName(userID) != null;
}
- public String getUserDisplayNameForID(String userID) {
+ public boolean hasIDForUserDisplayName(String userDisplayName) {
+ return userCatalogs.getID(userDisplayName) != null;
+ }
+
+ public String getDisplayNameForUserID(String userID) {
return userCatalogs.getDisplayName(userID);
}
- public String getUserIDForDisplayName(String displayName) {
- return userCatalogs.getUserID(displayName);
+ public String getIDForUserDisplayName(String userDisplayName) {
+ return userCatalogs.getID(userDisplayName);
}
- public List<String> getUserDisplayNamesForIDs(List<String> userIDs) {
+ public List<String> getDisplayNamesForUserIDs(List<String> userIDs) {
if(userIDs == null) {
userIDs = new ArrayList<String>();
}
final List<String> userDisplayNames = new ArrayList<String>();
for(String userID : userIDs) {
- final String displayName = getUserDisplayNameForID(userID);
+ final String displayName = getDisplayNameForUserID(userID);
userDisplayNames.add(displayName);
}
}
}-*/;
- public static void LOG(String ...args) {
+ public static void LOG(Object ...args) {
final StringBuilder sb = new StringBuilder();
- for(String arg : args) {
+ for(Object arg : args) {
sb.append(arg);
}
if(sb.length() > 0) {
GetRequest<AccountResource> getAccount = new GetRequest<AccountResource>(AccountResource.class, getApiPath(), userID, path) {
@Override
- public void onSuccess(AccountResource _result) {
- account = _result;
+ public void onSuccess(AccountResource accountResource) {
+ account = accountResource;
if(callback != null) {
callback.execute();
}
+
+ final List<String> memberIDs = new ArrayList<String>();
+ final List<Group> groups = account.getGroups();
+ for(Group group : groups) {
+ LOG("Group ", group);
+ for(String member: group.getMembers()) {
+ LOG(" ", member);
+ memberIDs.add(member);
+ }
+ }
+
+ final List<String> theUnknown = Pithos.this.filterUserIDsWithUnknownDisplayName(memberIDs);
// Initialize the user catalog
- new UpdateUserCatalogs(Pithos.this, Pithos.this.getUserID()).scheduleDeferred();
+ new UpdateUserCatalogs(Pithos.this, theUnknown).scheduleEntry();
+ LOG("Called new UpdateUserCatalogs(Pithos.this, theUnknown).scheduleDeferred();");
}
@Override
import gr.grnet.pithos.web.client.Helpers;
import gr.grnet.pithos.web.client.Pithos;
+import java.util.Iterator;
import java.util.List;
+import java.util.Map;
/**
* This is a wrapper around GetUserCatalogs that takes care of updating
}
public void onSuccess(UserCatalogs requestedUserCatalogs, UserCatalogs updatedUserCatalogs) {
+ for(Map.Entry<String, String> uc : requestedUserCatalogs) {
+ app.LOG("New displayName ", uc.getValue());
+ }
}
public void onError(Request request, Throwable t) {
public void scheduleDeferred() {
Scheduler.get().scheduleDeferred(this);
}
+
+ public void scheduleEntry() {
+ Scheduler.get().scheduleEntry(this);
+ }
}
);
}
- public boolean hasID(String id) {
- return id2name.containsKey(id);
+ public boolean hasID(String userID) {
+ return id2name.containsKey(userID);
}
- public boolean hasName(String name) {
- return name2id.containsKey(name);
+ public boolean hasDisplayName(String displayName) {
+ return name2id.containsKey(displayName);
}
- public String getDisplayName(String id) {
- return id2name.get(id);
+ public String getDisplayName(String userID) {
+ return id2name.get(userID);
}
- public String getUserID(String name) {
- return name2id.get(name);
+ public String getID(String displayName) {
+ return name2id.get(displayName);
}
+ /**
+ * Returns an iterator of <code>(UUID, DisplayName)</code> pairs.
+ */
@Override
public Iterator<Map.Entry<String, String>> iterator() {
return id2name.entrySet().iterator();
final Group group = app.getAccount().getGroup(groupName);
if (group == null)
return;
- group.removeMember(user.getName());
+ group.removeMember(user.getUserID());
String path = "?update=";
PostRequest updateGroup = new PostRequest(app.getApiPath(), app.getUserID(), path) {
public void removeMember(String username) {
members.remove(username);
}
+
+ @Override
+ public String toString() {
+ return "Group(" + name + ", " + members.size() + " members)";
+ }
}
public void render(Context context, User value, SafeHtmlBuilder sb) {
String html = AbstractImagePrototype.create(GroupTreeView.images.user()).getHTML();
sb.appendHtmlConstant(html).appendHtmlConstant(" ");
- sb.append(Templates.INSTANCE.nameSpan(value.getName()));
+ sb.append(Templates.INSTANCE.nameSpan(value.getUserID()));
}
@Override
package gr.grnet.pithos.web.client.grouptree;
-public class User {
- private String name;
-
- private String group;
-
- public User(String _name, String _group) {
- name = _name;
- group = _group;
+public final class User {
+ private final String userID;
+
+ private final String group;
+
+ public User(String name, String group) {
+ this.userID = name;
+ this.group = group;
+ }
+
+ public String getUserID() {
+ return this.userID;
+ }
+
+ public String getGroup() {
+ return this.group;
}
- public String getName() {
- return name;
+ @Override
+ public boolean equals(Object o) {
+ if(this == o) {
+ return true;
+ }
+ if(o == null || getClass() != o.getClass()) {
+ return false;
+ }
+
+ User user = (User) o;
+
+ if(group != null ? !group.equals(user.group) : user.group != null) {
+ return false;
+ }
+ if(userID != null ? !userID.equals(user.userID) : user.userID != null) {
+ return false;
+ }
+
+ return true;
}
- public String getGroup() {
- return group;
- }
+ @Override
+ public int hashCode() {
+ int result = userID != null ? userID.hashCode() : 0;
+ result = 31 * result + (group != null ? group.hashCode() : 0);
+ return result;
+ }
}
import com.google.gwt.http.client.Request;
import com.google.gwt.http.client.Response;
import com.google.gwt.http.client.URL;
-import com.google.gwt.json.client.JSONObject;
import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.text.shared.SafeHtmlRenderer;
import gr.grnet.pithos.web.client.FolderContextMenu;
import gr.grnet.pithos.web.client.Pithos;
import gr.grnet.pithos.web.client.SharingUsers;
-import gr.grnet.pithos.web.client.catalog.GetUserCatalogs;
import gr.grnet.pithos.web.client.catalog.UpdateUserCatalogs;
import gr.grnet.pithos.web.client.catalog.UserCatalogs;
import gr.grnet.pithos.web.client.foldertree.AccountResource;
return new DefaultNodeInfo<String>(userLevelDataProviderForIDs, new TextCell(new SafeHtmlRenderer<String>() {
@Override
public SafeHtml render(String object) {
- final String displayName = app.getUserDisplayNameForID(object);
+ final String displayName = app.getDisplayNameForUserID(object);
// LOG("render(userID = "+object+"), displayName = " + displayName);
SafeHtmlBuilder builder = new SafeHtmlBuilder();
render(displayName, builder);
String html = AbstractImagePrototype.create(OtherSharedTreeView.images.myShared()).getHTML();
builder.appendHtmlConstant(html).appendHtmlConstant(" ");
}
- final String displayName = app.getUserDisplayNameForID(object);
+ final String displayName = app.getDisplayNameForUserID(object);
builder.append(OtherSharedTreeView.Templates.INSTANCE.nameSpan(object));
}
}), null, null);