From cc0120ab25ea0d3743dc903322ea47beb9ee035b Mon Sep 17 00:00:00 2001 From: Christos KK Loverdos Date: Fri, 1 Feb 2013 14:23:10 +0200 Subject: [PATCH] Implement the /user_catalogs API --- src/gr/grnet/pithos/web/client/AddUserDialog.java | 5 +- .../grnet/pithos/web/client/CredentialsDialog.java | 4 +- .../grnet/pithos/web/client/DeleteFileDialog.java | 3 +- src/gr/grnet/pithos/web/client/FeedbackDialog.java | 6 +- .../grnet/pithos/web/client/FileContextMenu.java | 9 +- .../pithos/web/client/FilePermissionsDialog.java | 9 +- .../pithos/web/client/FilePropertiesDialog.java | 10 +- .../grnet/pithos/web/client/FilePublishDialog.java | 15 +- .../grnet/pithos/web/client/FileUploadDialog.java | 2 +- .../pithos/web/client/FileVersionsDialog.java | 3 +- .../grnet/pithos/web/client/FolderContextMenu.java | 4 +- .../pithos/web/client/FolderPermissionsDialog.java | 8 +- .../pithos/web/client/FolderPropertiesDialog.java | 8 +- src/gr/grnet/pithos/web/client/Helpers.java | 67 +++++++++ src/gr/grnet/pithos/web/client/Invitations.java | 2 - .../pithos/web/client/PermissionsAddDialog.java | 5 +- src/gr/grnet/pithos/web/client/Pithos.java | 96 +++++++++---- src/gr/grnet/pithos/web/client/SharingUsers.java | 2 - src/gr/grnet/pithos/web/client/Toolbar.java | 12 +- src/gr/grnet/pithos/web/client/ToolsMenu.java | 5 +- src/gr/grnet/pithos/web/client/VersionsList.java | 10 +- .../pithos/web/client/catalog/GetUserCatalogs.java | 150 ++++++++++++++++++++ .../pithos/web/client/catalog/UserCatalogs.java | 60 ++++++++ .../pithos/web/client/commands/AddUserCommand.java | 8 -- .../web/client/commands/DeleteGroupCommand.java | 6 +- .../web/client/commands/EmptyContainerCommand.java | 11 -- .../pithos/web/client/commands/PasteCommand.java | 4 +- .../web/client/commands/RemoveUserCommand.java | 6 +- .../web/client/commands/RestoreTrashCommand.java | 10 +- .../pithos/web/client/commands/ToTrashCommand.java | 10 +- .../web/client/foldertree/AccountResource.java | 1 + .../grnet/pithos/web/client/foldertree/File.java | 1 + .../pithos/web/client/foldertree/FileVersions.java | 1 + .../grnet/pithos/web/client/foldertree/Folder.java | 1 + .../web/client/foldertree/FolderTreeViewModel.java | 4 +- .../client/mysharedtree/MysharedTreeViewModel.java | 23 +-- .../othersharedtree/OtherSharedTreeViewModel.java | 14 +- .../pithos/web/client/rest/DeleteRequest.java | 3 +- .../grnet/pithos/web/client/rest/GetRequest.java | 22 +-- .../grnet/pithos/web/client/rest/HeadRequest.java | 3 +- .../grnet/pithos/web/client/rest/PostRequest.java | 3 +- .../grnet/pithos/web/client/rest/PutRequest.java | 3 +- .../web/client/rest/RestRequestCallback.java | 4 +- src/gr/grnet/pithos/web/client/tagtree/Tag.java | 2 +- .../web/client/tagtree/TagTreeViewModel.java | 4 +- 45 files changed, 444 insertions(+), 195 deletions(-) create mode 100644 src/gr/grnet/pithos/web/client/Helpers.java create mode 100644 src/gr/grnet/pithos/web/client/catalog/GetUserCatalogs.java create mode 100644 src/gr/grnet/pithos/web/client/catalog/UserCatalogs.java diff --git a/src/gr/grnet/pithos/web/client/AddUserDialog.java b/src/gr/grnet/pithos/web/client/AddUserDialog.java index 08d38c9..00542c7 100644 --- a/src/gr/grnet/pithos/web/client/AddUserDialog.java +++ b/src/gr/grnet/pithos/web/client/AddUserDialog.java @@ -34,7 +34,6 @@ */ package gr.grnet.pithos.web.client; -import gr.grnet.pithos.web.client.foldertree.Resource; import gr.grnet.pithos.web.client.grouptree.Group; import gr.grnet.pithos.web.client.rest.PostRequest; import gr.grnet.pithos.web.client.rest.RestException; @@ -187,7 +186,7 @@ public class AddUserDialog extends DialogBox { group.addMember(name); String path = "?update="; - PostRequest updateGroup = new PostRequest(app.getApiPath(), app.getUsername(), path) { + PostRequest updateGroup = new PostRequest(app.getApiPath(), app.getUserID(), path) { @Override public void onSuccess(Resource result) { @@ -210,7 +209,7 @@ public class AddUserDialog extends DialogBox { app.sessionExpired(); } }; - updateGroup.setHeader("X-Auth-Token", app.getToken()); + updateGroup.setHeader("X-Auth-Token", app.getUserToken()); String groupMembers = ""; for (String u : group.getMembers()) groupMembers += (URL.encodePathSegment(u) + ","); diff --git a/src/gr/grnet/pithos/web/client/CredentialsDialog.java b/src/gr/grnet/pithos/web/client/CredentialsDialog.java index 4dd2427..fd56799 100644 --- a/src/gr/grnet/pithos/web/client/CredentialsDialog.java +++ b/src/gr/grnet/pithos/web/client/CredentialsDialog.java @@ -92,7 +92,7 @@ public class CredentialsDialog extends DialogBox { table.setText(0, 0, "Username"); table.setText(1, 0, "Token"); TextBox username = new TextBox(); - username.setText(app.getUsername()); + username.setText(app.getUserID()); username.setReadOnly(true); username.setWidth(WIDTH_FIELD); username.addClickHandler(new ClickHandler() { @@ -107,7 +107,7 @@ public class CredentialsDialog extends DialogBox { table.setWidget(0, 1, username); TextBox tokenBox = new TextBox(); - tokenBox.setText(app.getToken()); + tokenBox.setText(app.getUserToken()); tokenBox.setReadOnly(true); tokenBox.setWidth(WIDTH_FIELD); tokenBox.addClickHandler(new ClickHandler() { diff --git a/src/gr/grnet/pithos/web/client/DeleteFileDialog.java b/src/gr/grnet/pithos/web/client/DeleteFileDialog.java index 16863a4..7cfc97e 100644 --- a/src/gr/grnet/pithos/web/client/DeleteFileDialog.java +++ b/src/gr/grnet/pithos/web/client/DeleteFileDialog.java @@ -37,7 +37,6 @@ package gr.grnet.pithos.web.client; import gr.grnet.pithos.web.client.MessagePanel.Images; import gr.grnet.pithos.web.client.foldertree.File; import gr.grnet.pithos.web.client.foldertree.Folder; -import gr.grnet.pithos.web.client.foldertree.Resource; import gr.grnet.pithos.web.client.rest.DeleteRequest; import gr.grnet.pithos.web.client.rest.RestException; @@ -159,7 +158,7 @@ public class DeleteFileDialog extends DialogBox { app.sessionExpired(); } }; - deleteFile.setHeader("X-Auth-Token", app.getToken()); + deleteFile.setHeader("X-Auth-Token", app.getUserToken()); Scheduler.get().scheduleDeferred(deleteFile); } else { diff --git a/src/gr/grnet/pithos/web/client/FeedbackDialog.java b/src/gr/grnet/pithos/web/client/FeedbackDialog.java index e9e9750..dbd6cd6 100644 --- a/src/gr/grnet/pithos/web/client/FeedbackDialog.java +++ b/src/gr/grnet/pithos/web/client/FeedbackDialog.java @@ -34,15 +34,11 @@ */ package gr.grnet.pithos.web.client; -import gr.grnet.pithos.web.client.foldertree.Resource; import gr.grnet.pithos.web.client.rest.PostRequest; import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.Scheduler; -import com.google.gwt.dom.client.Element; -import com.google.gwt.dom.client.EventTarget; import com.google.gwt.dom.client.NativeEvent; -import com.google.gwt.dom.client.TextAreaElement; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.dom.client.KeyCodes; @@ -152,7 +148,7 @@ public class FeedbackDialog extends DialogBox { /** */ void sendFeedback() { - PostRequest sendFeedback = new PostRequest("", "", otherProperties.get("feedbackUrl"), "feedback_msg=" + msg.getText() + "&feedback_data=" + appData + "&auth=" + app.getToken()) { + PostRequest sendFeedback = new PostRequest("", "", otherProperties.get("feedbackUrl"), "feedback_msg=" + msg.getText() + "&feedback_data=" + appData + "&auth=" + app.getUserToken()) { @Override protected void onUnauthorized(Response response) { diff --git a/src/gr/grnet/pithos/web/client/FileContextMenu.java b/src/gr/grnet/pithos/web/client/FileContextMenu.java index ba9d23e..eb9baec 100644 --- a/src/gr/grnet/pithos/web/client/FileContextMenu.java +++ b/src/gr/grnet/pithos/web/client/FileContextMenu.java @@ -47,7 +47,6 @@ import gr.grnet.pithos.web.client.foldertree.Folder; import java.util.List; -import com.google.gwt.http.client.URL; import com.google.gwt.resources.client.ClientBundle; import com.google.gwt.resources.client.ImageResource; import com.google.gwt.user.client.Command; @@ -193,13 +192,13 @@ public class FileContextMenu extends PopupPanel { Boolean[] permissions = null; boolean canWrite = true; if (selectedFolder != null) { - permissions = selectedFolder.getPermissions().get(app.getUsername()); - canWrite = selectedFolder.getOwner().equals(app.getUsername()) || (permissions!= null && permissions[1] != null && permissions[1]); + permissions = selectedFolder.getPermissions().get(app.getUserID()); + canWrite = selectedFolder.getOwner().equals(app.getUserID()) || (permissions!= null && permissions[1] != null && permissions[1]); } else { for (File f : selectedFiles) { - permissions = f.getPermissions().get(app.getUsername()); - canWrite &= (f.getOwner().equals(app.getUsername()) || (permissions!= null && permissions[1] != null && permissions[1])); + permissions = f.getPermissions().get(app.getUserID()); + canWrite &= (f.getOwner().equals(app.getUserID()) || (permissions!= null && permissions[1] != null && permissions[1])); } } boolean isFolderTreeSelected = selectedTree.equals(app.getFolderTreeView()); diff --git a/src/gr/grnet/pithos/web/client/FilePermissionsDialog.java b/src/gr/grnet/pithos/web/client/FilePermissionsDialog.java index 5cc0b3e..5192a52 100644 --- a/src/gr/grnet/pithos/web/client/FilePermissionsDialog.java +++ b/src/gr/grnet/pithos/web/client/FilePermissionsDialog.java @@ -35,7 +35,6 @@ package gr.grnet.pithos.web.client; import gr.grnet.pithos.web.client.foldertree.File; -import gr.grnet.pithos.web.client.foldertree.Resource; import gr.grnet.pithos.web.client.rest.HeadRequest; import gr.grnet.pithos.web.client.rest.PostRequest; @@ -50,14 +49,12 @@ import com.google.gwt.event.dom.client.KeyCodes; import com.google.gwt.http.client.Response; import com.google.gwt.http.client.URL; import com.google.gwt.http.client.UrlBuilder; -import com.google.gwt.i18n.client.Dictionary; import com.google.gwt.resources.client.ImageResource; import com.google.gwt.user.client.Command; import com.google.gwt.user.client.Window; 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.FocusPanel; import com.google.gwt.user.client.ui.HasHorizontalAlignment; import com.google.gwt.user.client.ui.HorizontalPanel; @@ -259,7 +256,7 @@ public class FilePermissionsDialog extends AbstractPropertiesDialog { */ @Override protected boolean accept() { - updateMetaData(app.getApiPath(), app.getUsername(), file.getUri() + "?update=", permList.getPermissions()); + updateMetaData(app.getApiPath(), app.getUserID(), file.getUri() + "?update=", permList.getPermissions()); return true; } @@ -297,7 +294,7 @@ public class FilePermissionsDialog extends AbstractPropertiesDialog { app.sessionExpired(); } }; - headFile.setHeader("X-Auth-Token", app.getToken()); + headFile.setHeader("X-Auth-Token", app.getUserToken()); Scheduler.get().scheduleDeferred(headFile); } @@ -313,7 +310,7 @@ public class FilePermissionsDialog extends AbstractPropertiesDialog { app.sessionExpired(); } }; - updateFile.setHeader("X-Auth-Token", app.getToken()); + updateFile.setHeader("X-Auth-Token", app.getUserToken()); String readPermHeader = "read="; String writePermHeader = "write="; diff --git a/src/gr/grnet/pithos/web/client/FilePropertiesDialog.java b/src/gr/grnet/pithos/web/client/FilePropertiesDialog.java index 6f7ebaa..013f631 100644 --- a/src/gr/grnet/pithos/web/client/FilePropertiesDialog.java +++ b/src/gr/grnet/pithos/web/client/FilePropertiesDialog.java @@ -35,7 +35,6 @@ package gr.grnet.pithos.web.client; import gr.grnet.pithos.web.client.foldertree.File; -import gr.grnet.pithos.web.client.foldertree.Resource; import gr.grnet.pithos.web.client.rest.PostRequest; import gr.grnet.pithos.web.client.rest.PutRequest; @@ -56,7 +55,6 @@ import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.FlexTable; import com.google.gwt.user.client.ui.HasHorizontalAlignment; import com.google.gwt.user.client.ui.HorizontalPanel; -import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.TextBox; import com.google.gwt.user.client.ui.VerticalPanel; @@ -250,7 +248,7 @@ public class FilePropertiesDialog extends AbstractPropertiesDialog { if (newFilename != null) { final String path = file.getParent().getUri() + "/" + newFilename; - PutRequest updateFile = new PutRequest(app.getApiPath(), app.getUsername(), path) { + PutRequest updateFile = new PutRequest(app.getApiPath(), app.getUserID(), path) { @Override public void onSuccess(Resource result) { updateMetaData(app.getApiPath(), file.getOwner(), path, newMeta); @@ -268,7 +266,7 @@ public class FilePropertiesDialog extends AbstractPropertiesDialog { app.sessionExpired(); } }; - updateFile.setHeader("X-Auth-Token", app.getToken()); + updateFile.setHeader("X-Auth-Token", app.getUserToken()); updateFile.setHeader("X-Move-From", URL.encodePathSegment(file.getUri())); updateFile.setHeader("Content-Type", file.getContentType()); for (String key : file.getMeta().keySet()) @@ -302,7 +300,7 @@ public class FilePropertiesDialog extends AbstractPropertiesDialog { Scheduler.get().scheduleDeferred(updateFile); } else - updateMetaData(app.getApiPath(), app.getUsername(), file.getUri(), newMeta); + updateMetaData(app.getApiPath(), app.getUserID(), file.getUri(), newMeta); return true; } @@ -343,7 +341,7 @@ public class FilePropertiesDialog extends AbstractPropertiesDialog { app.sessionExpired(); } }; - updateFile.setHeader("X-Auth-Token", app.getToken()); + updateFile.setHeader("X-Auth-Token", app.getUserToken()); for (String t : file.getMeta().keySet()) { updateFile.setHeader("X-Object-Meta-" + URL.encodePathSegment(t.trim()), "~"); diff --git a/src/gr/grnet/pithos/web/client/FilePublishDialog.java b/src/gr/grnet/pithos/web/client/FilePublishDialog.java index 9a180bc..83df31e 100644 --- a/src/gr/grnet/pithos/web/client/FilePublishDialog.java +++ b/src/gr/grnet/pithos/web/client/FilePublishDialog.java @@ -35,12 +35,9 @@ package gr.grnet.pithos.web.client; import gr.grnet.pithos.web.client.foldertree.File; -import gr.grnet.pithos.web.client.foldertree.Resource; import gr.grnet.pithos.web.client.rest.HeadRequest; import gr.grnet.pithos.web.client.rest.PostRequest; -import java.util.Map; - import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.Scheduler; import com.google.gwt.dom.client.NativeEvent; @@ -48,9 +45,7 @@ import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.dom.client.KeyCodes; import com.google.gwt.http.client.Response; -import com.google.gwt.http.client.URL; import com.google.gwt.http.client.UrlBuilder; -import com.google.gwt.i18n.client.Dictionary; import com.google.gwt.resources.client.ImageResource; import com.google.gwt.user.client.Command; import com.google.gwt.user.client.Window; @@ -162,7 +157,7 @@ public class FilePublishDialog extends AbstractPropertiesDialog { }); // Only show the read for all permission if the user is the owner. - if (file.getOwner().equals(app.getUsername())) { + if (file.getOwner().equals(app.getUserID())) { final HorizontalPanel permForAll = new HorizontalPanel(); permForAll.add(new Label("Public")); permForAll.add(readForAll); @@ -227,9 +222,9 @@ public class FilePublishDialog extends AbstractPropertiesDialog { protected boolean accept() { Boolean published = null; if (readForAll.getValue() != file.isPublished()) - if (file.getOwner().equals(app.getUsername())) + if (file.getOwner().equals(app.getUserID())) published = readForAll.getValue(); - updateMetaData(app.getApiPath(), app.getUsername(), file.getUri() + "?update=", published); + updateMetaData(app.getApiPath(), app.getUserID(), file.getUri() + "?update=", published); return true; } @@ -267,7 +262,7 @@ public class FilePublishDialog extends AbstractPropertiesDialog { app.sessionExpired(); } }; - headFile.setHeader("X-Auth-Token", app.getToken()); + headFile.setHeader("X-Auth-Token", app.getUserToken()); Scheduler.get().scheduleDeferred(headFile); } @@ -283,7 +278,7 @@ public class FilePublishDialog extends AbstractPropertiesDialog { app.sessionExpired(); } }; - updateFile.setHeader("X-Auth-Token", app.getToken()); + updateFile.setHeader("X-Auth-Token", app.getUserToken()); updateFile.setHeader("X-Object-Public", published.toString()); Scheduler.get().scheduleDeferred(updateFile); } diff --git a/src/gr/grnet/pithos/web/client/FileUploadDialog.java b/src/gr/grnet/pithos/web/client/FileUploadDialog.java index fd68131..84ca349 100644 --- a/src/gr/grnet/pithos/web/client/FileUploadDialog.java +++ b/src/gr/grnet/pithos/web/client/FileUploadDialog.java @@ -341,7 +341,7 @@ public class FileUploadDialog extends DialogBox { setVisible(true); setModal(true); super.center(); - setupUpload(this, app, app.getToken()); + setupUpload(this, app, app.getUserToken()); super.center(); } diff --git a/src/gr/grnet/pithos/web/client/FileVersionsDialog.java b/src/gr/grnet/pithos/web/client/FileVersionsDialog.java index 9b2efa4..2ee4de2 100644 --- a/src/gr/grnet/pithos/web/client/FileVersionsDialog.java +++ b/src/gr/grnet/pithos/web/client/FileVersionsDialog.java @@ -51,7 +51,6 @@ import com.google.gwt.resources.client.ImageResource; import com.google.gwt.user.client.Command; 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.FocusPanel; import com.google.gwt.user.client.ui.HasHorizontalAlignment; import com.google.gwt.user.client.ui.VerticalPanel; @@ -171,7 +170,7 @@ public class FileVersionsDialog extends AbstractPropertiesDialog { app.sessionExpired(); } }; - getVersions.setHeader("X-Auth-Token", app.getToken()); + getVersions.setHeader("X-Auth-Token", app.getUserToken()); Scheduler.get().scheduleDeferred(getVersions); } diff --git a/src/gr/grnet/pithos/web/client/FolderContextMenu.java b/src/gr/grnet/pithos/web/client/FolderContextMenu.java index ae4bb75..b29a316 100644 --- a/src/gr/grnet/pithos/web/client/FolderContextMenu.java +++ b/src/gr/grnet/pithos/web/client/FolderContextMenu.java @@ -82,8 +82,8 @@ public class FolderContextMenu extends PopupPanel { images = newImages; MenuBar contextMenu = new MenuBar(true); - Boolean[] permissions = folder.getPermissions().get(app.getUsername()); - boolean canWrite = folder.getOwner().equals(app.getUsername()) || (permissions!= null && permissions[1] != null && permissions[1]); + Boolean[] permissions = folder.getPermissions().get(app.getUserID()); + boolean canWrite = folder.getOwner().equals(app.getUserID()) || (permissions!= null && permissions[1] != null && permissions[1]); boolean isFolderTreeSelected = selectedTree.equals(app.getFolderTreeView()); boolean otherSharedTreeSelected = selectedTree.equals(app.getOtherSharedTreeView()); boolean mysharedTreeSelected = selectedTree.equals(app.getMySharedTreeView()); diff --git a/src/gr/grnet/pithos/web/client/FolderPermissionsDialog.java b/src/gr/grnet/pithos/web/client/FolderPermissionsDialog.java index c22eec8..37732d4 100644 --- a/src/gr/grnet/pithos/web/client/FolderPermissionsDialog.java +++ b/src/gr/grnet/pithos/web/client/FolderPermissionsDialog.java @@ -34,15 +34,11 @@ */ package gr.grnet.pithos.web.client; -import gr.grnet.pithos.web.client.commands.CreateGroupCommand; -import gr.grnet.pithos.web.client.foldertree.File; import gr.grnet.pithos.web.client.foldertree.Folder; -import gr.grnet.pithos.web.client.foldertree.Resource; import gr.grnet.pithos.web.client.rest.PostRequest; import gr.grnet.pithos.web.client.rest.PutRequest; import gr.grnet.pithos.web.client.rest.RestException; -import java.util.Iterator; import java.util.Map; import com.google.gwt.core.client.GWT; @@ -260,7 +256,7 @@ public class FolderPermissionsDialog extends DialogBox { app.sessionExpired(); } }; - newFolder.setHeader("X-Auth-Token", app.getToken()); + newFolder.setHeader("X-Auth-Token", app.getUserToken()); newFolder.setHeader("Content-Type", "application/folder"); newFolder.setHeader("Accept", "*/*"); newFolder.setHeader("Content-Length", "0"); @@ -281,7 +277,7 @@ public class FolderPermissionsDialog extends DialogBox { app.sessionExpired(); } }; - updateFolder.setHeader("X-Auth-Token", app.getToken()); + updateFolder.setHeader("X-Auth-Token", app.getUserToken()); String readPermHeader = "read="; String writePermHeader = "write="; for (String u : newPermissions.keySet()) { diff --git a/src/gr/grnet/pithos/web/client/FolderPropertiesDialog.java b/src/gr/grnet/pithos/web/client/FolderPropertiesDialog.java index 4c6438f..e3fcfb7 100644 --- a/src/gr/grnet/pithos/web/client/FolderPropertiesDialog.java +++ b/src/gr/grnet/pithos/web/client/FolderPropertiesDialog.java @@ -34,14 +34,10 @@ */ package gr.grnet.pithos.web.client; -import gr.grnet.pithos.web.client.foldertree.File; import gr.grnet.pithos.web.client.foldertree.Folder; -import gr.grnet.pithos.web.client.foldertree.Resource; import gr.grnet.pithos.web.client.rest.PutRequest; import gr.grnet.pithos.web.client.rest.RestException; -import java.util.Iterator; - import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.Scheduler; import com.google.gwt.dom.client.NativeEvent; @@ -145,7 +141,7 @@ public class FolderPropertiesDialog extends DialogBox { else generalTable.setText(1, 1, folder.getParent().getName()); if (create) - generalTable.setText(2, 1, app.getUsername()); + generalTable.setText(2, 1, app.getUserID()); else generalTable.setText(2, 1, folder.getOwner()); DateTimeFormat formatter = DateTimeFormat.getFormat("d/M/yyyy h:mm a"); @@ -272,7 +268,7 @@ public class FolderPropertiesDialog extends DialogBox { app.sessionExpired(); } }; - createFolder.setHeader("X-Auth-Token", app.getToken()); + createFolder.setHeader("X-Auth-Token", app.getUserToken()); createFolder.setHeader("Accept", "*/*"); createFolder.setHeader("Content-Length", "0"); createFolder.setHeader("Content-Type", "application/directory"); diff --git a/src/gr/grnet/pithos/web/client/Helpers.java b/src/gr/grnet/pithos/web/client/Helpers.java new file mode 100644 index 0000000..4b2b44d --- /dev/null +++ b/src/gr/grnet/pithos/web/client/Helpers.java @@ -0,0 +1,67 @@ +package gr.grnet.pithos.web.client; + +import com.google.gwt.json.client.JSONArray; +import com.google.gwt.json.client.JSONString; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; + +/** + * Helper methods. + */ +public final class Helpers { + private Helpers() {} + + public static boolean isEmptySafe(CharSequence s) { + return s == null || s.length() == 0; + } + + public static HashMap copyHashMap(HashMap map) { + assert map != null; + return new HashMap(map); + } + + public static List safeList(List list) { + if(list == null) { + return new ArrayList(); + } + return list; + } + + public static List toList(T ...items) { + final List list = new ArrayList(); + Collections.addAll(list, items); + return list; + } + + public static JSONArray listToJSONArray(List list) { + final JSONArray jsonArray = new JSONArray(); + if(list == null) { + return jsonArray; + } + + for(int i = 0; i < list.size(); i++) { + final JSONString jsonString = new JSONString(list.get(i)); + jsonArray.set(i, jsonString); + } + + return jsonArray; + } + + public static String stripTrailing(String s, String trailing) { + while(s.endsWith(trailing)) { + s = s.substring(0, s.length() - trailing.length()); + } + return s; + } + + public static String upToIncludingLastPart(String s, String part) { + int index = s.lastIndexOf(part); + if(index == -1) { + return s; + } + return s.substring(0, index + part.length()); + } +} diff --git a/src/gr/grnet/pithos/web/client/Invitations.java b/src/gr/grnet/pithos/web/client/Invitations.java index f7590e7..d6b5954 100644 --- a/src/gr/grnet/pithos/web/client/Invitations.java +++ b/src/gr/grnet/pithos/web/client/Invitations.java @@ -44,8 +44,6 @@ import com.google.gwt.json.client.JSONObject; import com.google.gwt.json.client.JSONParser; import com.google.gwt.json.client.JSONValue; -import gr.grnet.pithos.web.client.foldertree.Resource; - public class Invitations extends Resource { private int invitationsLeft = 0; diff --git a/src/gr/grnet/pithos/web/client/PermissionsAddDialog.java b/src/gr/grnet/pithos/web/client/PermissionsAddDialog.java index dd7e052..28aecef 100644 --- a/src/gr/grnet/pithos/web/client/PermissionsAddDialog.java +++ b/src/gr/grnet/pithos/web/client/PermissionsAddDialog.java @@ -46,7 +46,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; @@ -148,12 +147,12 @@ public class PermissionsAddDialog extends DialogBox { } } 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; } diff --git a/src/gr/grnet/pithos/web/client/Pithos.java b/src/gr/grnet/pithos/web/client/Pithos.java index bd6debd..7003da4 100644 --- a/src/gr/grnet/pithos/web/client/Pithos.java +++ b/src/gr/grnet/pithos/web/client/Pithos.java @@ -44,11 +44,13 @@ import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.logical.shared.ResizeEvent; import com.google.gwt.event.logical.shared.ResizeHandler; +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.i18n.client.DateTimeFormat; import com.google.gwt.i18n.client.Dictionary; import com.google.gwt.i18n.client.TimeZone; +import com.google.gwt.json.client.JSONObject; import com.google.gwt.resources.client.ClientBundle; import com.google.gwt.resources.client.CssResource; import com.google.gwt.resources.client.ImageResource; @@ -58,6 +60,8 @@ import com.google.gwt.user.client.ui.*; import com.google.gwt.view.client.SelectionChangeEvent; import com.google.gwt.view.client.SelectionChangeEvent.Handler; import com.google.gwt.view.client.SingleSelectionModel; +import gr.grnet.pithos.web.client.catalog.GetUserCatalogs; +import gr.grnet.pithos.web.client.catalog.UserCatalogs; import gr.grnet.pithos.web.client.commands.UploadFileCommand; import gr.grnet.pithos.web.client.foldertree.*; import gr.grnet.pithos.web.client.grouptree.Group; @@ -118,8 +122,8 @@ public class Pithos implements EntryPoint, ResizeHandler { */ static Images images = (Images) GWT.create(Images.class); - public String getUsername() { - return username; + public String getUserID() { + return userID; } public void setAccount(AccountResource acct) { @@ -218,12 +222,21 @@ public class Pithos implements EntryPoint, ResizeHandler { public HashMap userFullNameMap = new HashMap(); - private String username = null; + /** + * The ID that uniquely identifies the user in Pithos+. + * Currently this is a UUID. It used to be the user's email. + */ + private String userID = null; + + /** + * Hold mappings from user UUIDs to emails and vice-versa. + */ + private UserCatalogs userCatalogs = new UserCatalogs(); /** * The authentication token of the current user. */ - private String token; + private String userToken; VerticalPanel trees; @@ -272,6 +285,7 @@ public class Pithos implements EntryPoint, ResizeHandler { } private void initialize() { + System.out.println("initialize(), userToken = " + userToken); lastModified = new Date(); //Initialize if-modified-since value with now. resources.pithosCss().ensureInjected(); boolean bareContent = Window.Location.getParameter("noframe") != null; @@ -539,7 +553,7 @@ public class Pithos implements EntryPoint, ResizeHandler { } } }; - head.setHeader("X-Auth-Token", getToken()); + head.setHeader("X-Auth-Token", getUserToken()); head.setHeader("If-Modified-Since", DateTimeFormat.getFormat("EEE, dd MMM yyyy HH:mm:ss").format(lastModified, TimeZone.createTimeZone(0)) + " GMT"); Scheduler.get().scheduleDeferred(head); @@ -555,8 +569,8 @@ public class Pithos implements EntryPoint, ResizeHandler { disableUploadArea(); } else { - Boolean[] perms = f.getPermissions().get(username); - if(f.getOwner().equals(username) || (perms != null && perms[1] != null && perms[1])) { + Boolean[] perms = f.getPermissions().get(userID); + if(f.getOwner().equals(userID) || (perms != null && perms[1] != null && perms[1])) { upload.setEnabled(true); enableUploadArea(); } @@ -598,8 +612,16 @@ public class Pithos implements EntryPoint, ResizeHandler { private boolean parseUserCredentials() { Configuration conf = (Configuration) GWT.create(Configuration.class); Dictionary otherProperties = Dictionary.getDictionary("otherProperties"); + System.out.println("otherProperties = " + otherProperties); String cookie = otherProperties.get("authCookie"); + System.out.println("cookie = " + cookie); + Cookies.setCookie(cookie, "868fbb51-94a4-477d-8da3-dadad080c861|HlPjywM5FGAncsoNDzPZ2Q=="); +// Cookies.setCookie(cookie, "868fbb51-94a4-477d-8da3-dadad080c861%7CHlPjywM5FGAncsoNDzPZ2Q%3D%3D"); + for(String name: Cookies.getCookieNames()) { + System.out.println("cookie name: " + name); + } String auth = Cookies.getCookie(cookie); + System.out.println("auth = " + auth); if(auth == null) { authenticateUser(); return false; @@ -611,18 +633,24 @@ public class Pithos implements EntryPoint, ResizeHandler { auth = auth.substring(0, auth.length() - 1); } String[] authSplit = auth.split("\\" + conf.cookieSeparator(), 2); + for(String authPart: authSplit) { + System.out.println("authPart: " + authPart); + } if(authSplit.length != 2) { authenticateUser(); return false; } - username = authSplit[0]; - token = authSplit[1]; + userID = authSplit[0]; + userToken = authSplit[1]; + System.out.println("userID = " + userID); + System.out.println("userToken = " + userToken); String gotoUrl = Window.Location.getParameter("goto"); if(gotoUrl != null && gotoUrl.length() > 0) { Window.Location.assign(gotoUrl); return false; } + System.out.println("Returning true"); return true; } @@ -635,40 +663,54 @@ public class Pithos implements EntryPoint, ResizeHandler { } public void fetchAccount(final Command callback) { + System.out.println("fetchAccount(), userID = " + this.userID + ", userToken = " + this.userToken); String path = "?format=json"; - GetRequest getAccount = new GetRequest(AccountResource.class, getApiPath(), username, path) { + GetRequest getAccount = new GetRequest(AccountResource.class, getApiPath(), userID, path) { @Override public void onSuccess(AccountResource _result) { + System.out.println("fetchAccount(), userID = " + userID + ", userToken = " + userToken + " onSuccess()"); account = _result; if(callback != null) { callback.execute(); } + // Initialize the user catalog + new GetUserCatalogs(Pithos.this, Pithos.this.getUserID()) { + @Override + public void onSuccess(Request request, Response response, JSONObject result, UserCatalogs usersCatalog) { + super.onSuccess(request, response, result, usersCatalog); + Pithos.this.userCatalogs.updateFrom(usersCatalog); + } + }.scheduleDeferred(); } @Override public void onError(Throwable t) { + System.out.println("fetchAccount(), userID = " + userID + ", userToken = " + userToken + " onError() " + t.getClass().getName() + ": " + t.getMessage()); GWT.log("Error getting account", t); setError(t); if(t instanceof RestException) { + System.out.println("fetchAccount(), userID = " + userID + ", userToken = " + userToken + " Error getting account: " + ((RestException) t).getHttpStatusText()); displayError("Error getting account: " + ((RestException) t).getHttpStatusText()); } else { + System.out.println("fetchAccount(), userID = " + userID + ", userToken = " + userToken + "System error fetching user data: " + t.getMessage()); displayError("System error fetching user data: " + t.getMessage()); } } @Override protected void onUnauthorized(Response response) { + System.out.println("fetchAccount(), userID = " + userID + ", userToken = " + userToken + " onUnauthorized()"); sessionExpired(); } }; - getAccount.setHeader("X-Auth-Token", token); + getAccount.setHeader("X-Auth-Token", userToken); Scheduler.get().scheduleDeferred(getAccount); } public void updateStatistics() { - HeadRequest headAccount = new HeadRequest(AccountResource.class, getApiPath(), username, "", account) { + HeadRequest headAccount = new HeadRequest(AccountResource.class, getApiPath(), userID, "", account) { @Override public void onSuccess(AccountResource _result) { @@ -692,13 +734,13 @@ public class Pithos implements EntryPoint, ResizeHandler { sessionExpired(); } }; - headAccount.setHeader("X-Auth-Token", token); + headAccount.setHeader("X-Auth-Token", userToken); Scheduler.get().scheduleDeferred(headAccount); } protected void createHomeContainer(final AccountResource _account, final Command callback) { String path = "/" + Pithos.HOME_CONTAINER; - PutRequest createPithos = new PutRequest(getApiPath(), getUsername(), path) { + PutRequest createPithos = new PutRequest(getApiPath(), getUserID(), path) { @Override public void onSuccess(Resource result) { if(!_account.hasTrashContainer()) { @@ -726,13 +768,13 @@ public class Pithos implements EntryPoint, ResizeHandler { sessionExpired(); } }; - createPithos.setHeader("X-Auth-Token", getToken()); + createPithos.setHeader("X-Auth-Token", getUserToken()); Scheduler.get().scheduleDeferred(createPithos); } protected void createTrashContainer(final Command callback) { String path = "/" + Pithos.TRASH_CONTAINER; - PutRequest createPithos = new PutRequest(getApiPath(), getUsername(), path) { + PutRequest createPithos = new PutRequest(getApiPath(), getUserID(), path) { @Override public void onSuccess(Resource result) { fetchAccount(callback); @@ -755,7 +797,7 @@ public class Pithos implements EntryPoint, ResizeHandler { sessionExpired(); } }; - createPithos.setHeader("X-Auth-Token", getToken()); + createPithos.setHeader("X-Auth-Token", getUserToken()); Scheduler.get().scheduleDeferred(createPithos); } @@ -858,8 +900,8 @@ public class Pithos implements EntryPoint, ResizeHandler { return statusPanel; } - public String getToken() { - return token; + public String getUserToken() { + return userToken; } public static native void preventIESelection() /*-{ @@ -941,7 +983,7 @@ public class Pithos implements EntryPoint, ResizeHandler { pwp.hide(); } }; - deleteFolder.setHeader("X-Auth-Token", getToken()); + deleteFolder.setHeader("X-Auth-Token", getUserToken()); Scheduler.get().scheduleDeferred(deleteFolder); } @@ -976,7 +1018,7 @@ public class Pithos implements EntryPoint, ResizeHandler { sessionExpired(); } }; - copyFile.setHeader("X-Auth-Token", getToken()); + copyFile.setHeader("X-Auth-Token", getUserToken()); copyFile.setHeader("X-Copy-From", URL.encodePathSegment(file.getUri())); if(!file.getOwner().equals(targetUsername)) { copyFile.setHeader("X-Source-Account", URL.encodePathSegment(file.getOwner())); @@ -1016,7 +1058,7 @@ public class Pithos implements EntryPoint, ResizeHandler { sessionExpired(); } }; - copyFolder.setHeader("X-Auth-Token", getToken()); + copyFolder.setHeader("X-Auth-Token", getUserToken()); copyFolder.setHeader("Accept", "*/*"); copyFolder.setHeader("Content-Length", "0"); copyFolder.setHeader("Content-Type", "application/directory"); @@ -1242,7 +1284,7 @@ public class Pithos implements EntryPoint, ResizeHandler { sessionExpired(); } }; - newFolder.setHeader("X-Auth-Token", getToken()); + newFolder.setHeader("X-Auth-Token", getUserToken()); newFolder.setHeader("Content-Type", "application/folder"); newFolder.setHeader("Accept", "*/*"); newFolder.setHeader("Content-Length", "0"); @@ -1268,7 +1310,7 @@ public class Pithos implements EntryPoint, ResizeHandler { sessionExpired(); } }; - headFolder.setHeader("X-Auth-Token", getToken()); + headFolder.setHeader("X-Auth-Token", getUserToken()); Scheduler.get().scheduleDeferred(headFolder); } } @@ -1300,7 +1342,7 @@ public class Pithos implements EntryPoint, ResizeHandler { sessionExpired(); } }; - headFile.setHeader("X-Auth-Token", getToken()); + headFile.setHeader("X-Auth-Token", getUserToken()); Scheduler.get().scheduleDeferred(headFile); } @@ -1388,7 +1430,7 @@ public class Pithos implements EntryPoint, ResizeHandler { public void emptyContainer(final Folder container) { String path = "/" + container.getName() + "?delimiter=/"; - DeleteRequest delete = new DeleteRequest(getApiPath(), getUsername(), path) { + DeleteRequest delete = new DeleteRequest(getApiPath(), getUserID(), path) { @Override protected void onUnauthorized(Response response) { @@ -1412,7 +1454,7 @@ public class Pithos implements EntryPoint, ResizeHandler { } } }; - delete.setHeader("X-Auth-Token", getToken()); + delete.setHeader("X-Auth-Token", getUserToken()); Scheduler.get().scheduleDeferred(delete); } } diff --git a/src/gr/grnet/pithos/web/client/SharingUsers.java b/src/gr/grnet/pithos/web/client/SharingUsers.java index 52cffcb..00dbd18 100644 --- a/src/gr/grnet/pithos/web/client/SharingUsers.java +++ b/src/gr/grnet/pithos/web/client/SharingUsers.java @@ -34,8 +34,6 @@ */ package gr.grnet.pithos.web.client; -import gr.grnet.pithos.web.client.foldertree.Resource; - import java.util.ArrayList; import java.util.Date; import java.util.List; diff --git a/src/gr/grnet/pithos/web/client/Toolbar.java b/src/gr/grnet/pithos/web/client/Toolbar.java index f8d084b..0b10a59 100644 --- a/src/gr/grnet/pithos/web/client/Toolbar.java +++ b/src/gr/grnet/pithos/web/client/Toolbar.java @@ -78,8 +78,8 @@ public class Toolbar extends Composite { public void onClick(ClickEvent event) { Folder folder = app.getSelectedTree().getSelection(); if (folder != null) { - Boolean[] permissions = folder.getPermissions().get(app.getUsername()); - boolean canWrite = folder.getOwner().equals(app.getUsername()) || (permissions!= null && permissions[1] != null && permissions[1]); + Boolean[] permissions = folder.getPermissions().get(app.getUserID()); + boolean canWrite = folder.getOwner().equals(app.getUserID()) || (permissions!= null && permissions[1] != null && permissions[1]); if (!folder.isInTrash() && canWrite) new NewFolderCommand(app, null, folder).execute(); @@ -98,8 +98,8 @@ public class Toolbar extends Composite { public void onClick(ClickEvent event) { Folder folder = app.getSelectedTree().getSelection(); if (folder != null) { - Boolean[] permissions = folder.getPermissions().get(app.getUsername()); - boolean canWrite = folder.getOwner().equals(app.getUsername()) || (permissions!= null && permissions[1] != null && permissions[1]); + Boolean[] permissions = folder.getPermissions().get(app.getUserID()); + boolean canWrite = folder.getOwner().equals(app.getUserID()) || (permissions!= null && permissions[1] != null && permissions[1]); boolean isFolderTreeSelected = app.getSelectedTree().equals(app.getFolderTreeView()); if (!folder.isInTrash() && canWrite && isFolderTreeSelected && !folder.isContainer()) @@ -167,8 +167,8 @@ public class Toolbar extends Composite { @Override public void execute() { - Boolean[] permissions = folder.getPermissions().get(app.getUsername()); - boolean canWrite = folder.getOwner().equals(app.getUsername()) || (permissions!= null && permissions[1] != null && permissions[1]); + Boolean[] permissions = folder.getPermissions().get(app.getUserID()); + boolean canWrite = folder.getOwner().equals(app.getUserID()) || (permissions!= null && permissions[1] != null && permissions[1]); boolean isFolderTreeSelected = app.getSelectedTree().equals(app.getFolderTreeView()); boolean otherSharedTreeSelected = app.getSelectedTree().equals(app.getOtherSharedTreeView()); diff --git a/src/gr/grnet/pithos/web/client/ToolsMenu.java b/src/gr/grnet/pithos/web/client/ToolsMenu.java index c70c5c0..9d9452f 100644 --- a/src/gr/grnet/pithos/web/client/ToolsMenu.java +++ b/src/gr/grnet/pithos/web/client/ToolsMenu.java @@ -54,7 +54,6 @@ import gr.grnet.pithos.web.client.grouptree.User; import java.util.List; -import com.google.gwt.http.client.URL; import com.google.gwt.user.client.Command; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.AbstractImagePrototype; @@ -96,8 +95,8 @@ public class ToolsMenu extends PopupPanel { MenuBar contextMenu = new MenuBar(true); if (folder != null) { - Boolean[] permissions = folder.getPermissions().get(app.getUsername()); - boolean canWrite = folder.getOwner().equals(app.getUsername()) || (permissions!= null && permissions[1] != null && permissions[1]); + Boolean[] permissions = folder.getPermissions().get(app.getUserID()); + boolean canWrite = folder.getOwner().equals(app.getUserID()) || (permissions!= null && permissions[1] != null && permissions[1]); boolean isFolderTreeSelected = selectedTree.equals(app.getFolderTreeView()); boolean isMysharedTreeSelected = app.isMySharedSelected(); diff --git a/src/gr/grnet/pithos/web/client/VersionsList.java b/src/gr/grnet/pithos/web/client/VersionsList.java index b3634a8..4d479dd 100644 --- a/src/gr/grnet/pithos/web/client/VersionsList.java +++ b/src/gr/grnet/pithos/web/client/VersionsList.java @@ -36,7 +36,6 @@ package gr.grnet.pithos.web.client; import gr.grnet.pithos.web.client.FileVersionsDialog.Images; import gr.grnet.pithos.web.client.foldertree.File; -import gr.grnet.pithos.web.client.foldertree.Resource; import gr.grnet.pithos.web.client.foldertree.Version; import gr.grnet.pithos.web.client.rest.PostRequest; import gr.grnet.pithos.web.client.rest.RestException; @@ -46,8 +45,6 @@ import java.util.List; import com.google.gwt.core.client.Scheduler; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; -import com.google.gwt.event.dom.client.ScrollHandler; -import com.google.gwt.event.shared.HandlerRegistration; import com.google.gwt.http.client.Response; import com.google.gwt.http.client.URL; import com.google.gwt.i18n.client.DateTimeFormat; @@ -58,11 +55,6 @@ import com.google.gwt.user.client.ui.CustomScrollPanel; import com.google.gwt.user.client.ui.FlexTable; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.HasHorizontalAlignment; -import com.google.gwt.user.client.ui.NativeVerticalScrollbar; -import com.google.gwt.user.client.ui.ScrollPanel; -import com.google.gwt.user.client.ui.VerticalPanel; -import com.google.gwt.user.client.ui.VerticalScrollbar; -import com.google.gwt.user.client.ui.Widget; public class VersionsList extends Composite { @@ -165,7 +157,7 @@ public class VersionsList extends Composite { app.sessionExpired(); } }; - restoreVersion.setHeader("X-Auth-Token", app.getToken()); + restoreVersion.setHeader("X-Auth-Token", app.getUserToken()); restoreVersion.setHeader("X-Source-Object", URL.encodePathSegment(file.getUri())); restoreVersion.setHeader("X-Source-Version", String.valueOf(version)); restoreVersion.setHeader("Content-Range", "bytes 0-/*"); diff --git a/src/gr/grnet/pithos/web/client/catalog/GetUserCatalogs.java b/src/gr/grnet/pithos/web/client/catalog/GetUserCatalogs.java new file mode 100644 index 0000000..78c963e --- /dev/null +++ b/src/gr/grnet/pithos/web/client/catalog/GetUserCatalogs.java @@ -0,0 +1,150 @@ +package gr.grnet.pithos.web.client.catalog; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.core.client.Scheduler; +import com.google.gwt.http.client.*; +import com.google.gwt.json.client.JSONArray; +import com.google.gwt.json.client.JSONObject; +import com.google.gwt.json.client.JSONParser; +import com.google.gwt.json.client.JSONValue; +import gr.grnet.pithos.web.client.Helpers; +import gr.grnet.pithos.web.client.Pithos; + +import java.util.List; + +/** + * The request via which we obtain user catalog info. + */ +public class GetUserCatalogs implements Scheduler.ScheduledCommand { + private final String url; + private final String userToken; + private final List ids; + private final List names; + + public static final int SuccessCode = 200; + public static final String CallEndPoint = "/user_catalogs"; + public static final String RequestField_uuids = "uuids"; + public static final String RequestField_displaynames = "displaynames"; + public static final String ResponseField_displayname_catalog = "displayname_catalog"; + public static final String ResponseField_uuid_catalog = "uuid_catalog"; + + public GetUserCatalogs(Pithos app) { + this(app, null, null); + } + + public GetUserCatalogs(Pithos app, String userID) { + this(app, Helpers.toList(userID), null); + } + + public GetUserCatalogs(Pithos app, List ids, List names) { + assert app != null; + + // https://server.com/v1/ --> https://server.com + String path = app.getApiPath(); + path = Helpers.stripTrailing(path, "/"); + path = Helpers.upToIncludingLastPart(path, "/"); + path = Helpers.stripTrailing(path, "/"); + + // https://server.com/user_catalogs + this.url = path + CallEndPoint; + + this.ids = Helpers.safeList(ids); + this.names = Helpers.safeList(names); + this.userToken = app.getUserToken(); + } + + public String getURL() { + return url; + } + + private JSONObject makeRequestData() { + final JSONObject root = new JSONObject(); + final JSONArray uuids = Helpers.listToJSONArray(ids); + final JSONArray displaynames = Helpers.listToJSONArray(names); + + root.put(RequestField_uuids, uuids); + root.put(RequestField_displaynames, displaynames); + + return root; + } + + public UserCatalogs parseResult(JSONObject result) { + final UserCatalogs userCatalogs = new UserCatalogs(); + final JSONObject uuid_catalog = result.get(ResponseField_uuid_catalog).isObject(); + final JSONObject displayname_catalog = result.get(ResponseField_displayname_catalog).isObject(); + + for(String uuid: uuid_catalog.keySet()) { + final String name = uuid_catalog.get(uuid).isString().stringValue(); + userCatalogs.updateWithIDAndName(uuid, name); + } + + for(String name: displayname_catalog.keySet()) { + final String uuid = displayname_catalog.get(name).isString().stringValue(); + userCatalogs.updateWithIDAndName(uuid, name); + } + + return userCatalogs; + } + + public void onSuccess(Request request, Response response, JSONObject result, UserCatalogs userCatalogs) { + System.out.println("GetUserCatalogs: " + result); + } + + public void onBadStatusCode(Request request, Response response) { + + } + + public void onError(Request request, Throwable t) { + GWT.log("GetUserCatalogs", t); + System.out.print("GetUserCatalogs: " + t.getClass().getName() + ": " + t.getMessage()); + } + + @Override + public void execute() { + final RequestBuilder rb = new RequestBuilder(RequestBuilder.POST, getURL()); + rb.setHeader("X-Auth-Token", userToken); + final String requestData = makeRequestData().toString(); + + try { + System.out.println("=================================="); + System.out.println("POST " + getURL()); + System.out.println("=================================="); + rb.sendRequest(requestData, new RequestCallback() { + @Override + public void onResponseReceived(Request request, Response response) { + final int statusCode = response.getStatusCode(); + + if(statusCode != SuccessCode) { + GetUserCatalogs.this.onBadStatusCode(request, response); + return; + } + + final String responseText = response.getText(); + final JSONValue jsonValue = JSONParser.parseStrict(responseText); + final JSONObject result = jsonValue.isObject(); + + if(result == null) { + GetUserCatalogs.this.onError(request, new Exception("GetUserCatalogs: json result is not an object")); + return; + } + + final UserCatalogs userCatalogs = parseResult(result); + + GetUserCatalogs.this.onSuccess(request, response, result, userCatalogs); + } + + @Override + public void onError(Request request, Throwable exception) { + GetUserCatalogs.this.onError(request, exception); + } + }); + } + catch(Exception e) { + GWT.log("GetUserCatalogs", e); + } + } + + public void scheduleDeferred() { + Scheduler.get().scheduleDeferred(this); + } +} diff --git a/src/gr/grnet/pithos/web/client/catalog/UserCatalogs.java b/src/gr/grnet/pithos/web/client/catalog/UserCatalogs.java new file mode 100644 index 0000000..ddcdcf0 --- /dev/null +++ b/src/gr/grnet/pithos/web/client/catalog/UserCatalogs.java @@ -0,0 +1,60 @@ +package gr.grnet.pithos.web.client.catalog; + +import gr.grnet.pithos.web.client.Helpers; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +/** + * Holds one-to-one mappings from user IDs to respective user display names. + * + * The iterator returns map entries with id as the key and name as the value. + */ +public class UserCatalogs implements Iterable>{ + private HashMap id2name = new HashMap(); + private HashMap name2id = new HashMap(); + + public UserCatalogs() { + this(new HashMap(), new HashMap()); + } + + private UserCatalogs(HashMap id2name, HashMap name2id) { + this.id2name = id2name; + this.name2id = name2id; + } + + public UserCatalogs updateWithIDAndName(String id, String name) { + this.id2name.put(id, name); + this.name2id.put(name, id); + + return this; + } + + public UserCatalogs updateFrom(UserCatalogs other) { + for(Map.Entry otherIDAndName : other) { + this.updateWithIDAndName(otherIDAndName.getKey(), otherIDAndName.getValue()); + } + return this; + } + + public UserCatalogs copy() { + return new UserCatalogs( + Helpers.copyHashMap(id2name), + Helpers.copyHashMap(name2id) + ); + } + + public boolean hasID(String id) { + return id2name.containsKey(id); + } + + public boolean hasName(String email) { + return name2id.containsKey(email); + } + + @Override + public Iterator> iterator() { + return id2name.entrySet().iterator(); + } +} diff --git a/src/gr/grnet/pithos/web/client/commands/AddUserCommand.java b/src/gr/grnet/pithos/web/client/commands/AddUserCommand.java index 5fe90a8..264e5c7 100644 --- a/src/gr/grnet/pithos/web/client/commands/AddUserCommand.java +++ b/src/gr/grnet/pithos/web/client/commands/AddUserCommand.java @@ -36,17 +36,9 @@ package gr.grnet.pithos.web.client.commands; import gr.grnet.pithos.web.client.AddUserDialog; import gr.grnet.pithos.web.client.Pithos; -import gr.grnet.pithos.web.client.foldertree.Resource; import gr.grnet.pithos.web.client.grouptree.Group; -import gr.grnet.pithos.web.client.rest.PostRequest; -import gr.grnet.pithos.web.client.rest.RestException; -import com.google.gwt.core.client.GWT; -import com.google.gwt.core.client.Scheduler; -import com.google.gwt.http.client.Response; -import com.google.gwt.http.client.URL; import com.google.gwt.user.client.Command; -import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.PopupPanel; /** diff --git a/src/gr/grnet/pithos/web/client/commands/DeleteGroupCommand.java b/src/gr/grnet/pithos/web/client/commands/DeleteGroupCommand.java index 19ec973..d23cbba 100644 --- a/src/gr/grnet/pithos/web/client/commands/DeleteGroupCommand.java +++ b/src/gr/grnet/pithos/web/client/commands/DeleteGroupCommand.java @@ -35,7 +35,7 @@ package gr.grnet.pithos.web.client.commands; import gr.grnet.pithos.web.client.Pithos; -import gr.grnet.pithos.web.client.foldertree.Resource; +import gr.grnet.pithos.web.client.Resource; import gr.grnet.pithos.web.client.grouptree.Group; import gr.grnet.pithos.web.client.rest.PostRequest; import gr.grnet.pithos.web.client.rest.RestException; @@ -75,7 +75,7 @@ public class DeleteGroupCommand implements Command { containerPanel.hide(); if (Window.confirm("Are you sure you want to delete group " + group.getName())) { String path = "?update="; - PostRequest updateGroup = new PostRequest(app.getApiPath(), app.getUsername(), path) { + PostRequest updateGroup = new PostRequest(app.getApiPath(), app.getUserID(), path) { @Override public void onSuccess(Resource result) { @@ -98,7 +98,7 @@ public class DeleteGroupCommand implements Command { app.sessionExpired(); } }; - updateGroup.setHeader("X-Auth-Token", app.getToken()); + updateGroup.setHeader("X-Auth-Token", app.getUserToken()); updateGroup.setHeader("X-Account-Group-" + URL.encodePathSegment(group.getName()), "~"); Scheduler.get().scheduleDeferred(updateGroup); } diff --git a/src/gr/grnet/pithos/web/client/commands/EmptyContainerCommand.java b/src/gr/grnet/pithos/web/client/commands/EmptyContainerCommand.java index 9e677b9..8aa805a 100644 --- a/src/gr/grnet/pithos/web/client/commands/EmptyContainerCommand.java +++ b/src/gr/grnet/pithos/web/client/commands/EmptyContainerCommand.java @@ -35,19 +35,8 @@ package gr.grnet.pithos.web.client.commands; import gr.grnet.pithos.web.client.Pithos; -import gr.grnet.pithos.web.client.foldertree.File; import gr.grnet.pithos.web.client.foldertree.Folder; -import gr.grnet.pithos.web.client.foldertree.Resource; -import gr.grnet.pithos.web.client.rest.DeleteRequest; -import gr.grnet.pithos.web.client.rest.GetRequest; -import gr.grnet.pithos.web.client.rest.RestException; -import java.util.Iterator; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.core.client.Scheduler; -import com.google.gwt.http.client.Response; -import com.google.gwt.http.client.URL; import com.google.gwt.user.client.Command; import com.google.gwt.user.client.ui.PopupPanel; diff --git a/src/gr/grnet/pithos/web/client/commands/PasteCommand.java b/src/gr/grnet/pithos/web/client/commands/PasteCommand.java index e46eeb6..1189ade 100644 --- a/src/gr/grnet/pithos/web/client/commands/PasteCommand.java +++ b/src/gr/grnet/pithos/web/client/commands/PasteCommand.java @@ -39,7 +39,7 @@ import gr.grnet.pithos.web.client.Clipboard; import gr.grnet.pithos.web.client.Pithos; import gr.grnet.pithos.web.client.foldertree.File; import gr.grnet.pithos.web.client.foldertree.Folder; -import gr.grnet.pithos.web.client.foldertree.Resource; +import gr.grnet.pithos.web.client.Resource; import gr.grnet.pithos.web.client.rest.PutRequest; import gr.grnet.pithos.web.client.rest.RestException; @@ -159,7 +159,7 @@ public class PasteCommand implements Command { app.sessionExpired(); } }; - copyFile.setHeader("X-Auth-Token", app.getToken()); + copyFile.setHeader("X-Auth-Token", app.getUserToken()); copyFile.setHeader("X-Move-From", URL.encodePathSegment(file.getUri())); copyFile.setHeader("Content-Type", file.getContentType()); Scheduler.get().scheduleDeferred(copyFile); diff --git a/src/gr/grnet/pithos/web/client/commands/RemoveUserCommand.java b/src/gr/grnet/pithos/web/client/commands/RemoveUserCommand.java index 7bc14fa..0edfb9c 100644 --- a/src/gr/grnet/pithos/web/client/commands/RemoveUserCommand.java +++ b/src/gr/grnet/pithos/web/client/commands/RemoveUserCommand.java @@ -35,7 +35,7 @@ package gr.grnet.pithos.web.client.commands; import gr.grnet.pithos.web.client.Pithos; -import gr.grnet.pithos.web.client.foldertree.Resource; +import gr.grnet.pithos.web.client.Resource; import gr.grnet.pithos.web.client.grouptree.Group; import gr.grnet.pithos.web.client.grouptree.User; import gr.grnet.pithos.web.client.rest.PostRequest; @@ -78,7 +78,7 @@ public class RemoveUserCommand implements Command { return; group.removeMember(user.getName()); String path = "?update="; - PostRequest updateGroup = new PostRequest(app.getApiPath(), app.getUsername(), path) { + PostRequest updateGroup = new PostRequest(app.getApiPath(), app.getUserID(), path) { @Override public void onSuccess(Resource result) { @@ -112,7 +112,7 @@ public class RemoveUserCommand implements Command { app.sessionExpired(); } }; - updateGroup.setHeader("X-Auth-Token", app.getToken()); + updateGroup.setHeader("X-Auth-Token", app.getUserToken()); String groupMembers = ""; if (!group.getMembers().isEmpty()) { for (String u : group.getMembers()) diff --git a/src/gr/grnet/pithos/web/client/commands/RestoreTrashCommand.java b/src/gr/grnet/pithos/web/client/commands/RestoreTrashCommand.java index 564189a..9d46406 100644 --- a/src/gr/grnet/pithos/web/client/commands/RestoreTrashCommand.java +++ b/src/gr/grnet/pithos/web/client/commands/RestoreTrashCommand.java @@ -40,9 +40,7 @@ import java.util.List; import gr.grnet.pithos.web.client.Pithos; import gr.grnet.pithos.web.client.foldertree.File; import gr.grnet.pithos.web.client.foldertree.Folder; -import gr.grnet.pithos.web.client.foldertree.Resource; -import gr.grnet.pithos.web.client.rest.DeleteRequest; -import gr.grnet.pithos.web.client.rest.GetRequest; +import gr.grnet.pithos.web.client.Resource; import gr.grnet.pithos.web.client.rest.PutRequest; import gr.grnet.pithos.web.client.rest.RestException; @@ -111,14 +109,14 @@ public class RestoreTrashCommand implements Command { private void untrashFolder(final Folder f, final Command callback) { String path = "/" + Pithos.HOME_CONTAINER + "/" + f.getPrefix(); - app.copyFolder(f, app.getUsername(), path, true, callback); + app.copyFolder(f, app.getUserID(), path, true, callback); } protected void untrashFiles(final Iterator iter, final Command callback) { if (iter.hasNext()) { File file = iter.next(); String path = "/" + Pithos.HOME_CONTAINER + "/" + file.getPath(); - PutRequest untrashFile = new PutRequest(app.getApiPath(), app.getUsername(), path) { + PutRequest untrashFile = new PutRequest(app.getApiPath(), app.getUserID(), path) { @Override public void onSuccess(Resource result) { untrashFiles(iter, callback); @@ -140,7 +138,7 @@ public class RestoreTrashCommand implements Command { app.sessionExpired(); } }; - untrashFile.setHeader("X-Auth-Token", app.getToken()); + untrashFile.setHeader("X-Auth-Token", app.getUserToken()); untrashFile.setHeader("X-Move-From", URL.encodePathSegment(file.getUri())); untrashFile.setHeader("Content-Type", file.getContentType()); diff --git a/src/gr/grnet/pithos/web/client/commands/ToTrashCommand.java b/src/gr/grnet/pithos/web/client/commands/ToTrashCommand.java index cf5371c..f5a1fe5 100644 --- a/src/gr/grnet/pithos/web/client/commands/ToTrashCommand.java +++ b/src/gr/grnet/pithos/web/client/commands/ToTrashCommand.java @@ -37,9 +37,7 @@ package gr.grnet.pithos.web.client.commands; import gr.grnet.pithos.web.client.Pithos; import gr.grnet.pithos.web.client.foldertree.File; import gr.grnet.pithos.web.client.foldertree.Folder; -import gr.grnet.pithos.web.client.foldertree.Resource; -import gr.grnet.pithos.web.client.rest.DeleteRequest; -import gr.grnet.pithos.web.client.rest.GetRequest; +import gr.grnet.pithos.web.client.Resource; import gr.grnet.pithos.web.client.rest.PutRequest; import gr.grnet.pithos.web.client.rest.RestException; @@ -121,14 +119,14 @@ public class ToTrashCommand implements Command{ private void trashFolder(final Folder f, final Command callback) { String path = "/" + Pithos.TRASH_CONTAINER + "/" + f.getPrefix(); - app.copyFolder(f, app.getUsername(), path, true, callback); + app.copyFolder(f, app.getUserID(), path, true, callback); } protected void trashFiles(final Iterator iter, final Command callback) { if (iter.hasNext()) { File file = iter.next(); String path = "/" + Pithos.TRASH_CONTAINER + "/" + file.getPath(); - PutRequest trashFile = new PutRequest(app.getApiPath(), app.getUsername(), path) { + PutRequest trashFile = new PutRequest(app.getApiPath(), app.getUserID(), path) { @Override public void onSuccess(Resource result) { trashFiles(iter, callback); @@ -150,7 +148,7 @@ public class ToTrashCommand implements Command{ app.sessionExpired(); } }; - trashFile.setHeader("X-Auth-Token", app.getToken()); + trashFile.setHeader("X-Auth-Token", app.getUserToken()); trashFile.setHeader("X-Move-From", URL.encodePathSegment(file.getUri())); trashFile.setHeader("Content-Type", file.getContentType()); Scheduler.get().scheduleDeferred(trashFile); diff --git a/src/gr/grnet/pithos/web/client/foldertree/AccountResource.java b/src/gr/grnet/pithos/web/client/foldertree/AccountResource.java index bc2db06..0c6a2b6 100644 --- a/src/gr/grnet/pithos/web/client/foldertree/AccountResource.java +++ b/src/gr/grnet/pithos/web/client/foldertree/AccountResource.java @@ -36,6 +36,7 @@ package gr.grnet.pithos.web.client.foldertree; import gr.grnet.pithos.web.client.Pithos; +import gr.grnet.pithos.web.client.Resource; import gr.grnet.pithos.web.client.grouptree.Group; import java.util.ArrayList; diff --git a/src/gr/grnet/pithos/web/client/foldertree/File.java b/src/gr/grnet/pithos/web/client/foldertree/File.java index c5b667f..52cdca2 100644 --- a/src/gr/grnet/pithos/web/client/foldertree/File.java +++ b/src/gr/grnet/pithos/web/client/foldertree/File.java @@ -47,6 +47,7 @@ import com.google.gwt.i18n.client.NumberFormat; import com.google.gwt.i18n.client.DateTimeFormat.PredefinedFormat; import com.google.gwt.json.client.JSONObject; import com.google.gwt.json.client.JSONValue; +import gr.grnet.pithos.web.client.Resource; public class File extends Resource { private String name; diff --git a/src/gr/grnet/pithos/web/client/foldertree/FileVersions.java b/src/gr/grnet/pithos/web/client/foldertree/FileVersions.java index a7b5ac2..40a6c98 100644 --- a/src/gr/grnet/pithos/web/client/foldertree/FileVersions.java +++ b/src/gr/grnet/pithos/web/client/foldertree/FileVersions.java @@ -44,6 +44,7 @@ import com.google.gwt.json.client.JSONNumber; import com.google.gwt.json.client.JSONParser; import com.google.gwt.json.client.JSONString; import com.google.gwt.json.client.JSONValue; +import gr.grnet.pithos.web.client.Resource; public class FileVersions extends Resource { private List versions; diff --git a/src/gr/grnet/pithos/web/client/foldertree/Folder.java b/src/gr/grnet/pithos/web/client/foldertree/Folder.java index 5ce0b72..e7bffa1 100644 --- a/src/gr/grnet/pithos/web/client/foldertree/Folder.java +++ b/src/gr/grnet/pithos/web/client/foldertree/Folder.java @@ -52,6 +52,7 @@ import com.google.gwt.json.client.JSONArray; import com.google.gwt.json.client.JSONObject; import com.google.gwt.json.client.JSONParser; import com.google.gwt.json.client.JSONValue; +import gr.grnet.pithos.web.client.Resource; public class Folder extends Resource { /* diff --git a/src/gr/grnet/pithos/web/client/foldertree/FolderTreeViewModel.java b/src/gr/grnet/pithos/web/client/foldertree/FolderTreeViewModel.java index 48b1227..bf23947 100644 --- a/src/gr/grnet/pithos/web/client/foldertree/FolderTreeViewModel.java +++ b/src/gr/grnet/pithos/web/client/foldertree/FolderTreeViewModel.java @@ -182,7 +182,7 @@ public class FolderTreeViewModel implements TreeViewModel { Scheduler.get().scheduleDeferred(this); } }; - getFolder.setHeader("X-Auth-Token", app.getToken()); + getFolder.setHeader("X-Auth-Token", app.getUserToken()); Scheduler.get().scheduleDeferred(getFolder); } else if (callback != null) @@ -281,7 +281,7 @@ public class FolderTreeViewModel implements TreeViewModel { Scheduler.get().scheduleDeferred(this); } }; - getFolder.setHeader("X-Auth-Token", app.getToken()); + getFolder.setHeader("X-Auth-Token", app.getUserToken()); Scheduler.get().scheduleDeferred(getFolder); } } diff --git a/src/gr/grnet/pithos/web/client/mysharedtree/MysharedTreeViewModel.java b/src/gr/grnet/pithos/web/client/mysharedtree/MysharedTreeViewModel.java index b98cb95..6c3147a 100644 --- a/src/gr/grnet/pithos/web/client/mysharedtree/MysharedTreeViewModel.java +++ b/src/gr/grnet/pithos/web/client/mysharedtree/MysharedTreeViewModel.java @@ -40,39 +40,24 @@ import gr.grnet.pithos.web.client.Pithos; import gr.grnet.pithos.web.client.foldertree.AccountResource; import gr.grnet.pithos.web.client.foldertree.File; import gr.grnet.pithos.web.client.foldertree.Folder; -import gr.grnet.pithos.web.client.foldertree.FolderTreeView; import gr.grnet.pithos.web.client.mysharedtree.MysharedTreeView.Templates; -import gr.grnet.pithos.web.client.othersharedtree.OtherSharedTreeView; -import gr.grnet.pithos.web.client.othersharedtree.OtherSharedTreeViewModel; import gr.grnet.pithos.web.client.rest.GetRequest; import gr.grnet.pithos.web.client.rest.RestException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; import com.google.gwt.cell.client.AbstractCell; import com.google.gwt.cell.client.Cell; -import com.google.gwt.cell.client.TextCell; import com.google.gwt.cell.client.ValueUpdater; -import com.google.gwt.cell.client.Cell.Context; import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.Scheduler; import com.google.gwt.event.dom.client.ContextMenuEvent; import com.google.gwt.http.client.Response; import com.google.gwt.http.client.URL; -import com.google.gwt.safehtml.shared.SafeHtml; import com.google.gwt.safehtml.shared.SafeHtmlBuilder; -import com.google.gwt.text.shared.SafeHtmlRenderer; import com.google.gwt.user.client.Command; import com.google.gwt.user.client.ui.AbstractImagePrototype; import com.google.gwt.view.client.ListDataProvider; -import com.google.gwt.view.client.SelectionChangeEvent; -import com.google.gwt.view.client.SelectionChangeEvent.Handler; import com.google.gwt.view.client.SingleSelectionModel; import com.google.gwt.view.client.TreeViewModel; @@ -134,7 +119,7 @@ public class MysharedTreeViewModel implements TreeViewModel { private void fetchSharedContainers(final Command callback) { String path = "?format=json&shared=&public="; - GetRequest getAccount = new GetRequest(AccountResource.class, app.getApiPath(), app.getUsername(), path) { + GetRequest getAccount = new GetRequest(AccountResource.class, app.getApiPath(), app.getUserID(), path) { @Override public void onSuccess(final AccountResource _result) { firstLevelDataProvider.getList().clear(); @@ -165,7 +150,7 @@ public class MysharedTreeViewModel implements TreeViewModel { app.sessionExpired(); } }; - getAccount.setHeader("X-Auth-Token", app.getToken()); + getAccount.setHeader("X-Auth-Token", app.getUserToken()); Scheduler.get().scheduleDeferred(getAccount); } @@ -206,7 +191,7 @@ public class MysharedTreeViewModel implements TreeViewModel { app.sessionExpired(); } }; - getFolder.setHeader("X-Auth-Token", app.getToken()); + getFolder.setHeader("X-Auth-Token", app.getUserToken()); Scheduler.get().scheduleDeferred(getFolder); } else if (callback != null) @@ -254,7 +239,7 @@ public class MysharedTreeViewModel implements TreeViewModel { app.sessionExpired(); } }; - getFolder.setHeader("X-Auth-Token", app.getToken()); + getFolder.setHeader("X-Auth-Token", app.getUserToken()); Scheduler.get().scheduleDeferred(getFolder); } diff --git a/src/gr/grnet/pithos/web/client/othersharedtree/OtherSharedTreeViewModel.java b/src/gr/grnet/pithos/web/client/othersharedtree/OtherSharedTreeViewModel.java index b2ba2aa..14cc53c 100644 --- a/src/gr/grnet/pithos/web/client/othersharedtree/OtherSharedTreeViewModel.java +++ b/src/gr/grnet/pithos/web/client/othersharedtree/OtherSharedTreeViewModel.java @@ -39,18 +39,14 @@ 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.foldertree.AccountResource; -import gr.grnet.pithos.web.client.foldertree.File; import gr.grnet.pithos.web.client.foldertree.Folder; -import gr.grnet.pithos.web.client.mysharedtree.MysharedTreeView; import gr.grnet.pithos.web.client.othersharedtree.OtherSharedTreeView.Templates; import gr.grnet.pithos.web.client.rest.GetRequest; import gr.grnet.pithos.web.client.rest.RestException; import java.util.HashMap; -import java.util.HashSet; import java.util.Iterator; import java.util.Map; -import java.util.Set; import com.google.gwt.cell.client.AbstractCell; import com.google.gwt.cell.client.Cell; @@ -67,8 +63,6 @@ import com.google.gwt.text.shared.SafeHtmlRenderer; import com.google.gwt.user.client.Command; import com.google.gwt.user.client.ui.AbstractImagePrototype; import com.google.gwt.view.client.ListDataProvider; -import com.google.gwt.view.client.SelectionChangeEvent; -import com.google.gwt.view.client.SelectionChangeEvent.Handler; import com.google.gwt.view.client.SingleSelectionModel; import com.google.gwt.view.client.TreeViewModel; @@ -188,7 +182,7 @@ public class OtherSharedTreeViewModel implements TreeViewModel { app.sessionExpired(); } }; - getSharingUsers.setHeader("X-Auth-Token", app.getToken()); + getSharingUsers.setHeader("X-Auth-Token", app.getUserToken()); Scheduler.get().scheduleDeferred(getSharingUsers); } @@ -263,7 +257,7 @@ public class OtherSharedTreeViewModel implements TreeViewModel { app.sessionExpired(); } }; - getUserSharedContainers.setHeader("X-Auth-Token", app.getToken()); + getUserSharedContainers.setHeader("X-Auth-Token", app.getUserToken()); Scheduler.get().scheduleDeferred(getUserSharedContainers); } @@ -294,7 +288,7 @@ public class OtherSharedTreeViewModel implements TreeViewModel { app.sessionExpired(); } }; - getFolder.setHeader("X-Auth-Token", app.getToken()); + getFolder.setHeader("X-Auth-Token", app.getUserToken()); Scheduler.get().scheduleDeferred(getFolder); } else if (callback != null) @@ -348,7 +342,7 @@ public class OtherSharedTreeViewModel implements TreeViewModel { app.sessionExpired(); } }; - getFolder.setHeader("X-Auth-Token", app.getToken()); + getFolder.setHeader("X-Auth-Token", app.getUserToken()); Scheduler.get().scheduleDeferred(getFolder); } diff --git a/src/gr/grnet/pithos/web/client/rest/DeleteRequest.java b/src/gr/grnet/pithos/web/client/rest/DeleteRequest.java index b6b71ee..8351801 100644 --- a/src/gr/grnet/pithos/web/client/rest/DeleteRequest.java +++ b/src/gr/grnet/pithos/web/client/rest/DeleteRequest.java @@ -35,7 +35,7 @@ package gr.grnet.pithos.web.client.rest; -import gr.grnet.pithos.web.client.foldertree.Resource; +import gr.grnet.pithos.web.client.Resource; import java.util.HashMap; import java.util.Map; @@ -77,6 +77,7 @@ public abstract class DeleteRequest implements ScheduledCommand { @Override public void execute() { + System.out.println("DELETE " + api + owner + path); RequestBuilder builder = new RequestBuilder(RequestBuilder.DELETE, api + owner + path); for (String header : headers.keySet()) { builder.setHeader(header, headers.get(header)); diff --git a/src/gr/grnet/pithos/web/client/rest/GetRequest.java b/src/gr/grnet/pithos/web/client/rest/GetRequest.java index 7bec14f..c8e7246 100644 --- a/src/gr/grnet/pithos/web/client/rest/GetRequest.java +++ b/src/gr/grnet/pithos/web/client/rest/GetRequest.java @@ -35,7 +35,7 @@ package gr.grnet.pithos.web.client.rest; -import gr.grnet.pithos.web.client.foldertree.Resource; +import gr.grnet.pithos.web.client.Resource; import java.util.HashMap; import java.util.Map; @@ -53,7 +53,7 @@ public abstract class GetRequest implements ScheduledCommand protected int retries = 0; - protected Class aClass; + protected Class resourceClass; private String api; @@ -71,8 +71,8 @@ public abstract class GetRequest implements ScheduledCommand public abstract void onError(Throwable t); - public GetRequest(Class aClass, String api, String owner, String path, int okCode, T result) { - this.aClass = aClass; + public GetRequest(Class resourceClass, String api, String owner, String path, int okCode, T result) { + this.resourceClass = resourceClass; this.api = api; this.owner = owner; this.path = path; @@ -80,12 +80,12 @@ public abstract class GetRequest implements ScheduledCommand this.result = result; } - public GetRequest(Class aClass, String api, String owner, String path) { - this(aClass, api, owner, path, -1, null); + public GetRequest(Class resourceClass, String api, String owner, String path) { + this(resourceClass, api, owner, path, -1, null); } - public GetRequest(Class aClass, String api, String owner, String path, T result) { - this(aClass, api, owner, path, -1, result); + public GetRequest(Class resourceClass, String api, String owner, String path, T result) { + this(resourceClass, api, owner, path, -1, result); } @Override @@ -94,7 +94,9 @@ public abstract class GetRequest implements ScheduledCommand path += "&t=" + System.currentTimeMillis(); else path += "?t=" + System.currentTimeMillis(); + System.out.println("GET " + api + owner + path); RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, api + owner + path); + for (String header : headers.keySet()) { builder.setHeader(header, headers.get(header)); } @@ -102,16 +104,18 @@ public abstract class GetRequest implements ScheduledCommand builder.sendRequest("", new RestRequestCallback(api + owner + path, okCode) { @Override public void onSuccess(T object) { + System.out.println("GET onSuccess() " + api + owner + path); GetRequest.this.onSuccess(object); } @Override public T deserialize(Response response) { - return Resource.createFromResponse(aClass, owner, response, result); + return Resource.createFromResponse(resourceClass, owner, response, result); } @Override public void onError(Request request, Throwable throwable) { + System.out.println("GET onError()" + api + owner + path); if (throwable instanceof RestException) { if (((RestException) throwable).getHttpStatusCode() == 304 && result != null){ GWT.log("Using cache: " + result.toString(), null); diff --git a/src/gr/grnet/pithos/web/client/rest/HeadRequest.java b/src/gr/grnet/pithos/web/client/rest/HeadRequest.java index 1e4cdf0..d8d2330 100644 --- a/src/gr/grnet/pithos/web/client/rest/HeadRequest.java +++ b/src/gr/grnet/pithos/web/client/rest/HeadRequest.java @@ -35,7 +35,7 @@ package gr.grnet.pithos.web.client.rest; -import gr.grnet.pithos.web.client.foldertree.Resource; +import gr.grnet.pithos.web.client.Resource; import java.util.HashMap; import java.util.Map; @@ -96,6 +96,7 @@ public abstract class HeadRequest implements ScheduledComman path += "&t=" + System.currentTimeMillis(); else path += "?t=" + System.currentTimeMillis(); + System.out.println("HEAD " + api + owner + path); RequestBuilder builder = new RequestBuilder(RequestBuilder.HEAD, api + owner + path); for (String header : headers.keySet()) { builder.setHeader(header, headers.get(header)); diff --git a/src/gr/grnet/pithos/web/client/rest/PostRequest.java b/src/gr/grnet/pithos/web/client/rest/PostRequest.java index fe3da92..a0798ac 100644 --- a/src/gr/grnet/pithos/web/client/rest/PostRequest.java +++ b/src/gr/grnet/pithos/web/client/rest/PostRequest.java @@ -35,7 +35,7 @@ package gr.grnet.pithos.web.client.rest; -import gr.grnet.pithos.web.client.foldertree.Resource; +import gr.grnet.pithos.web.client.Resource; import java.util.HashMap; import java.util.Map; @@ -78,6 +78,7 @@ public abstract class PostRequest implements ScheduledCommand { @Override public void execute() { + System.out.println("POST " + api + owner + path); RequestBuilder builder = new RequestBuilder(RequestBuilder.POST, api + owner + path); for (String header : headers.keySet()) { builder.setHeader(header, headers.get(header)); diff --git a/src/gr/grnet/pithos/web/client/rest/PutRequest.java b/src/gr/grnet/pithos/web/client/rest/PutRequest.java index 3c57792..375dd92 100644 --- a/src/gr/grnet/pithos/web/client/rest/PutRequest.java +++ b/src/gr/grnet/pithos/web/client/rest/PutRequest.java @@ -70,7 +70,7 @@ package gr.grnet.pithos.web.client.rest; -import gr.grnet.pithos.web.client.foldertree.Resource; +import gr.grnet.pithos.web.client.Resource; import java.util.HashMap; import java.util.Map; @@ -103,6 +103,7 @@ public abstract class PutRequest implements ScheduledCommand { @Override public void execute() { + System.out.println("PUT " + api + owner + path); RequestBuilder builder = new RequestBuilder(RequestBuilder.PUT, api + owner + path); for (String header : headers.keySet()) { builder.setHeader(header, headers.get(header)); diff --git a/src/gr/grnet/pithos/web/client/rest/RestRequestCallback.java b/src/gr/grnet/pithos/web/client/rest/RestRequestCallback.java index 689affe..9f4075a 100644 --- a/src/gr/grnet/pithos/web/client/rest/RestRequestCallback.java +++ b/src/gr/grnet/pithos/web/client/rest/RestRequestCallback.java @@ -38,7 +38,7 @@ package gr.grnet.pithos.web.client.rest; import com.google.gwt.http.client.Request; import com.google.gwt.http.client.RequestCallback; import com.google.gwt.http.client.Response; -import gr.grnet.pithos.web.client.foldertree.Resource; +import gr.grnet.pithos.web.client.Resource; public abstract class RestRequestCallback implements RequestCallback { @@ -78,6 +78,8 @@ public abstract class RestRequestCallback implements Request } catch (Exception e) {} + System.out.println("Response headers: " + response.getHeadersAsString()); + onError(request, new RestException(path, response.getStatusCode(), statusText, text)); } } catch (Exception e) { diff --git a/src/gr/grnet/pithos/web/client/tagtree/Tag.java b/src/gr/grnet/pithos/web/client/tagtree/Tag.java index 42640dd..e51ceb3 100644 --- a/src/gr/grnet/pithos/web/client/tagtree/Tag.java +++ b/src/gr/grnet/pithos/web/client/tagtree/Tag.java @@ -36,7 +36,7 @@ package gr.grnet.pithos.web.client.tagtree; import gr.grnet.pithos.web.client.foldertree.File; -import gr.grnet.pithos.web.client.foldertree.Resource; +import gr.grnet.pithos.web.client.Resource; import java.util.Date; import java.util.LinkedHashSet; diff --git a/src/gr/grnet/pithos/web/client/tagtree/TagTreeViewModel.java b/src/gr/grnet/pithos/web/client/tagtree/TagTreeViewModel.java index 5f4fd79..ceab232 100644 --- a/src/gr/grnet/pithos/web/client/tagtree/TagTreeViewModel.java +++ b/src/gr/grnet/pithos/web/client/tagtree/TagTreeViewModel.java @@ -147,7 +147,7 @@ public class TagTreeViewModel implements TreeViewModel { if (iter.hasNext()) { Folder f = iter.next(); String path = f.getUri() + "?format=json&meta=" + t.getName(); - GetRequest getFolder = new GetRequest(Folder.class, app.getApiPath(), app.getUsername(), path) { + GetRequest getFolder = new GetRequest(Folder.class, app.getApiPath(), app.getUserID(), path) { @Override public void onSuccess(Folder _result) { files.addAll(_result.getFiles()); @@ -169,7 +169,7 @@ public class TagTreeViewModel implements TreeViewModel { app.sessionExpired(); } }; - getFolder.setHeader("X-Auth-Token", app.getToken()); + getFolder.setHeader("X-Auth-Token", app.getUserToken()); Scheduler.get().scheduleDeferred(getFolder); } else { -- 1.7.10.4