From: Christos KK Loverdos Date: Thu, 7 Feb 2013 17:47:36 +0000 (+0200) Subject: Work in progress. Do not rely on this commit X-Git-Tag: 0.14rc1~43 X-Git-Url: https://code.grnet.gr/git/pithos-web-client/commitdiff_plain/ee77dbf16f524824e3c0337a04984caa84a12231 Work in progress. Do not rely on this commit --- diff --git a/src/gr/grnet/pithos/web/client/AddUserDialog.java b/src/gr/grnet/pithos/web/client/AddUserDialog.java index 407dfe7..9dcffd1 100644 --- a/src/gr/grnet/pithos/web/client/AddUserDialog.java +++ b/src/gr/grnet/pithos/web/client/AddUserDialog.java @@ -45,7 +45,10 @@ import com.google.gwt.http.client.Response; import com.google.gwt.http.client.URL; import com.google.gwt.user.client.Event.NativePreviewEvent; import com.google.gwt.user.client.ui.*; +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 gr.grnet.pithos.web.client.grouptree.User; import gr.grnet.pithos.web.client.rest.PostRequest; import gr.grnet.pithos.web.client.rest.RestException; @@ -60,7 +63,7 @@ public class AddUserDialog extends DialogBox { /** * The widget that holds the folderName of the folder. */ - TextBox userName = new TextBox(); + TextBox userDisplayNameTextBox = new TextBox(); final VerticalPanel inner; @@ -101,7 +104,7 @@ public class AddUserDialog extends DialogBox { FlexTable generalTable = new FlexTable(); generalTable.setText(0, 0, "Username"); - generalTable.setWidget(0, 1, userName); + generalTable.setWidget(0, 1, userDisplayNameTextBox); generalTable.getFlexCellFormatter().setStyleName(0, 0, "props-labels"); generalTable.getFlexCellFormatter().setStyleName(0, 1, "props-values"); @@ -131,7 +134,7 @@ public class AddUserDialog extends DialogBox { @Override public void center() { super.center(); - userName.setFocus(true); + userDisplayNameTextBox.setFocus(true); } @Override @@ -169,19 +172,43 @@ public class AddUserDialog extends DialogBox { * Generate an RPC request to create a new folder. */ void addUser() { - String name = userName.getText().trim(); - if(name.length() == 0) { + final String userDisplayName = userDisplayNameTextBox.getText().trim(); + if(userDisplayName.length() == 0) { return; } - if(!Const.EMAIL_REGEX.test(name)) { + if(!Const.EMAIL_REGEX.test(userDisplayName)) { app.displayWarning("Username must be a valid email address"); return; } - group.addMember(name); - String path = "?update="; - PostRequest updateGroup = new PostRequest(app.getApiPath(), app.getUserID(), path) { + // Now get the userID + final String userID = app.getUserIDForDisplayName(userDisplayName); + if(userID != null) { + doAddUser(userID, userDisplayName); + } + 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.getUserID(userDisplayName); + if(userID != null) { + doAddUser(userID, userDisplayName); + } + else { + app.displayError("Unknown user " + userDisplayName); + } + } + }.scheduleDeferred(); + } + } + private void doAddUser(String userID, String userDisplayName) { + final User newUser = new User(userID, userDisplayName, group.getName()); + app.LOG("doAddUser() ", newUser); + group.addUser(newUser); + final String path = "?update="; + PostRequest updateGroup = new PostRequest(app, app.getApiPath(), app.getUserID(), path) { @Override public void onSuccess(Resource result) { app.updateGroupNode(group); @@ -205,10 +232,7 @@ public class AddUserDialog extends DialogBox { } }; updateGroup.setHeader(Const.X_AUTH_TOKEN, app.getUserToken()); - String groupMembers = ""; - for(String u : group.getMembers()) { - groupMembers += (URL.encodePathSegment(u) + ","); - } + final String groupMembers = group.encodeUserIDsForXAccountGroup(); updateGroup.setHeader(Const.X_ACCOUNT_GROUP_ + URL.encodePathSegment(group.getName()), groupMembers); Scheduler.get().scheduleDeferred(updateGroup); } diff --git a/src/gr/grnet/pithos/web/client/Const.java b/src/gr/grnet/pithos/web/client/Const.java index f87dd3c..11589cc 100644 --- a/src/gr/grnet/pithos/web/client/Const.java +++ b/src/gr/grnet/pithos/web/client/Const.java @@ -23,6 +23,13 @@ public class Const { public static final String TRASH_CONTAINER = "trash"; public static final RegExp EMAIL_REGEX = RegExp.compile("^[A-Z0-9._%+-]+@[A-Z0-9.-]+[.][A-Z]{2,4}$", "i"); public static final String X_ACCOUNT_GROUP_ = "X-Account-Group-"; + public static final String X_ACCOUNT_CONTAINER_COUNT = "X-Account-Container-Count"; + public static final String X_ACCOUNT_OBJECT_COUNT = "X-Account-Object-Count"; + public static final String X_ACCOUNT_BYTES_USED = "X-Account-Bytes-Used"; + public static final String X_ACCOUNT_POLICY_QUOTA = "X-Account-Policy-Quota"; + public static final String X_ACCOUNT_LAST_LOGIN = "X-Account-Last-Login"; + public static final String LAST_MODIFIED = "Last-Modified"; + public static final String NUMBER_FORMAT_1 = "######.#"; private Const() {} diff --git a/src/gr/grnet/pithos/web/client/DeleteFileDialog.java b/src/gr/grnet/pithos/web/client/DeleteFileDialog.java index ffbacdd..dfecfab 100644 --- a/src/gr/grnet/pithos/web/client/DeleteFileDialog.java +++ b/src/gr/grnet/pithos/web/client/DeleteFileDialog.java @@ -135,7 +135,7 @@ public class DeleteFileDialog extends DialogBox { if (iter.hasNext()) { File f = iter.next(); String path = f.getUri(); - DeleteRequest deleteFile = new DeleteRequest(app.getApiPath(), f.getOwnerID(), URL.encode(path)) { + DeleteRequest deleteFile = new DeleteRequest(app, app.getApiPath(), f.getOwnerID(), URL.encode(path)) { @Override public void onSuccess(Resource result) { deleteFile(iter); diff --git a/src/gr/grnet/pithos/web/client/FeedbackDialog.java b/src/gr/grnet/pithos/web/client/FeedbackDialog.java index 0461def..5c85235 100644 --- a/src/gr/grnet/pithos/web/client/FeedbackDialog.java +++ b/src/gr/grnet/pithos/web/client/FeedbackDialog.java @@ -140,7 +140,7 @@ public class FeedbackDialog extends DialogBox { */ void sendFeedback() { final String feedbackURL = otherProperties.get("feedbackUrl"); - PostRequest sendFeedback = new PostRequest("", "", feedbackURL, "feedback_msg=" + msg.getText() + "&feedback_data=" + appData + "&auth=" + app.getUserToken()) { + PostRequest sendFeedback = new PostRequest(app, "", "", 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/FilePermissionsDialog.java b/src/gr/grnet/pithos/web/client/FilePermissionsDialog.java index 49a9a9a..dac21b9 100644 --- a/src/gr/grnet/pithos/web/client/FilePermissionsDialog.java +++ b/src/gr/grnet/pithos/web/client/FilePermissionsDialog.java @@ -262,10 +262,10 @@ public class FilePermissionsDialog extends AbstractPropertiesDialog { protected void updateMetaData(String api, String owner, final String path, final Map newPermissions) { if (newPermissions != null) { - PostRequest updateFile = new PostRequest(api, owner, path) { + PostRequest updateFile = new PostRequest(app, api, owner, path) { @Override public void onSuccess(Resource result) { - HeadRequest headFile = new HeadRequest(File.class, app.getApiPath(), file.getOwnerID(), path, file) { + HeadRequest headFile = new HeadRequest(app, File.class, app.getApiPath(), file.getOwnerID(), path, file) { @Override public void onSuccess(File _result) { diff --git a/src/gr/grnet/pithos/web/client/FilePropertiesDialog.java b/src/gr/grnet/pithos/web/client/FilePropertiesDialog.java index 4161b90..6bb542f 100644 --- a/src/gr/grnet/pithos/web/client/FilePropertiesDialog.java +++ b/src/gr/grnet/pithos/web/client/FilePropertiesDialog.java @@ -261,7 +261,7 @@ public class FilePropertiesDialog extends AbstractPropertiesDialog { if (newFilename != null) { final String path = file.getParent().getUri() + "/" + newFilename; - PutRequest updateFile = new PutRequest(app.getApiPath(), app.getUserID(), path) { + PutRequest updateFile = new PutRequest(app, app.getApiPath(), app.getUserID(), path) { @Override public void onSuccess(Resource result) { updateMetaData(app.getApiPath(), file.getOwnerID(), path, newMeta); @@ -319,7 +319,7 @@ public class FilePropertiesDialog extends AbstractPropertiesDialog { protected void updateMetaData(final String api, final String owner, final String path, Map newMeta) { if (newMeta != null) { - PostRequest updateFile = new PostRequest(api, owner, path + "?update=") { + PostRequest updateFile = new PostRequest(app, api, owner, path + "?update=") { @Override public void onSuccess(Resource result) { if (!app.isMySharedSelected()) diff --git a/src/gr/grnet/pithos/web/client/FilePublishDialog.java b/src/gr/grnet/pithos/web/client/FilePublishDialog.java index b074f01..eca3581 100644 --- a/src/gr/grnet/pithos/web/client/FilePublishDialog.java +++ b/src/gr/grnet/pithos/web/client/FilePublishDialog.java @@ -230,10 +230,10 @@ public class FilePublishDialog extends AbstractPropertiesDialog { protected void updateMetaData(String api, String owner, final String path, final Boolean published) { if (published != null) { - PostRequest updateFile = new PostRequest(api, owner, path) { + PostRequest updateFile = new PostRequest(app, api, owner, path) { @Override public void onSuccess(Resource result) { - HeadRequest headFile = new HeadRequest(File.class, app.getApiPath(), file.getOwnerID(), path, file) { + HeadRequest headFile = new HeadRequest(app, File.class, app.getApiPath(), file.getOwnerID(), path, file) { @Override public void onSuccess(File _result) { diff --git a/src/gr/grnet/pithos/web/client/FileVersionsDialog.java b/src/gr/grnet/pithos/web/client/FileVersionsDialog.java index 2a2fa79..ea5569f 100644 --- a/src/gr/grnet/pithos/web/client/FileVersionsDialog.java +++ b/src/gr/grnet/pithos/web/client/FileVersionsDialog.java @@ -146,7 +146,7 @@ public class FileVersionsDialog extends AbstractPropertiesDialog { protected void fetchVersions() { String path = file.getUri() + "?format=json&version=list"; - GetRequest getVersions = new GetRequest(FileVersions.class, app.getApiPath(), file.getOwnerID(), path) { + GetRequest getVersions = new GetRequest(app, FileVersions.class, app.getApiPath(), file.getOwnerID(), path) { @Override public void onSuccess(FileVersions _result) { diff --git a/src/gr/grnet/pithos/web/client/FolderPermissionsDialog.java b/src/gr/grnet/pithos/web/client/FolderPermissionsDialog.java index 77389e7..18dfb24 100644 --- a/src/gr/grnet/pithos/web/client/FolderPermissionsDialog.java +++ b/src/gr/grnet/pithos/web/client/FolderPermissionsDialog.java @@ -215,7 +215,7 @@ public class FolderPermissionsDialog extends DialogBox { protected void updateMetadata(final String path, final Map newPermissions) { if (newPermissions != null) { - PostRequest updateFolder = new PostRequest(app.getApiPath(), folder.getOwnerID(), path) { + PostRequest updateFolder = new PostRequest(app, app.getApiPath(), folder.getOwnerID(), path) { @Override public void onSuccess(Resource result) { app.updateFolder(folder.getParent(), false, new Command() { @@ -234,7 +234,7 @@ public class FolderPermissionsDialog extends DialogBox { if (t instanceof RestException) { if (((RestException) t).getHttpStatusCode() == Response.SC_NOT_FOUND) { //Probably a virtual folder final String path1 = folder.getUri(); - PutRequest newFolder = new PutRequest(app.getApiPath(), folder.getOwnerID(), path1) { + PutRequest newFolder = new PutRequest(app, app.getApiPath(), folder.getOwnerID(), path1) { @Override public void onSuccess(Resource result) { updateMetadata(path, newPermissions); diff --git a/src/gr/grnet/pithos/web/client/FolderPropertiesDialog.java b/src/gr/grnet/pithos/web/client/FolderPropertiesDialog.java index e2f1def..9847b46 100644 --- a/src/gr/grnet/pithos/web/client/FolderPropertiesDialog.java +++ b/src/gr/grnet/pithos/web/client/FolderPropertiesDialog.java @@ -249,7 +249,7 @@ public class FolderPropertiesDialog extends DialogBox { return; } String path = folder.getUri() + "/" + name; - PutRequest createFolder = new PutRequest(app.getApiPath(), folder.getOwnerID(), path) { + PutRequest createFolder = new PutRequest(app, app.getApiPath(), folder.getOwnerID(), path) { @Override public void onSuccess(Resource result) { app.updateFolder(folder, true, new Command() { diff --git a/src/gr/grnet/pithos/web/client/GroupCreateDialog.java b/src/gr/grnet/pithos/web/client/GroupCreateDialog.java index 799cee0..b598679 100644 --- a/src/gr/grnet/pithos/web/client/GroupCreateDialog.java +++ b/src/gr/grnet/pithos/web/client/GroupCreateDialog.java @@ -34,10 +34,6 @@ */ package gr.grnet.pithos.web.client; -import gr.grnet.pithos.web.client.commands.AddUserCommand; -import gr.grnet.pithos.web.client.foldertree.Folder; -import gr.grnet.pithos.web.client.grouptree.Group; - import com.google.gwt.dom.client.NativeEvent; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; @@ -45,13 +41,9 @@ import com.google.gwt.event.dom.client.KeyCodes; import com.google.gwt.event.dom.client.KeyDownEvent; import com.google.gwt.user.client.Command; 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.DialogBox; -import com.google.gwt.user.client.ui.FlexTable; -import com.google.gwt.user.client.ui.HasHorizontalAlignment; -import com.google.gwt.user.client.ui.TextBox; -import com.google.gwt.user.client.ui.VerticalPanel; +import com.google.gwt.user.client.ui.*; +import gr.grnet.pithos.web.client.commands.AddUserCommand; +import gr.grnet.pithos.web.client.grouptree.Group; /** * The 'Folder properties' dialog box implementation. @@ -61,56 +53,56 @@ public class GroupCreateDialog extends DialogBox { protected Pithos app; private Command callback; - - /** - * The widget that holds the folderName of the folder. - */ - TextBox groupName = new TextBox(); - - final VerticalPanel inner; - - public GroupCreateDialog(final Pithos app) { - this(app, null); - } - - /** - * The widget's constructor. - */ - public GroupCreateDialog(final Pithos app, Command callback) { + + /** + * The widget that holds the folderName of the folder. + */ + TextBox groupNameTextBox = new TextBox(); + + final VerticalPanel inner; + + public GroupCreateDialog(final Pithos app) { + this(app, null); + } + + /** + * The widget's constructor. + */ + public GroupCreateDialog(final Pithos app, Command callback) { this.app = app; this.callback = callback; - - Anchor close = new Anchor("close"); - close.addStyleName("close"); - close.addClickHandler(new ClickHandler() { - - @Override - public void onClick(ClickEvent event) { - hide(); - } - }); - - setGlassEnabled(true); - setStyleName("pithos-DialogBox"); - - // Enable IE selection for the dialog (must disable it upon closing it) - Pithos.enableIESelection(); - - // Use this opportunity to set the dialog's caption. - setText("Create group"); - - // Outer contains inner and buttons - VerticalPanel outer = new VerticalPanel(); - outer.add(close); - // Inner contains generalPanel and permPanel - inner = new VerticalPanel(); - inner.addStyleName("inner"); - - VerticalPanel generalPanel = new VerticalPanel(); + + Anchor close = new Anchor("close"); + close.addStyleName("close"); + close.addClickHandler(new ClickHandler() { + + @Override + public void onClick(ClickEvent event) { + hide(); + } + }); + + setGlassEnabled(true); + setStyleName("pithos-DialogBox"); + + // Enable IE selection for the dialog (must disable it upon closing it) + Pithos.enableIESelection(); + + // Use this opportunity to set the dialog's caption. + setText("Create group"); + + // Outer contains inner and buttons + VerticalPanel outer = new VerticalPanel(); + outer.add(close); + // Inner contains generalPanel and permPanel + inner = new VerticalPanel(); + inner.addStyleName("inner"); + + VerticalPanel generalPanel = new VerticalPanel(); FlexTable generalTable = new FlexTable(); generalTable.setText(0, 0, "Name"); - generalTable.setWidget(0, 1, groupName); + generalTable.setWidget(0, 1, groupNameTextBox); generalTable.getFlexCellFormatter().setStyleName(0, 0, "props-labels"); generalTable.getFlexCellFormatter().setStyleName(0, 1, "props-values"); @@ -120,69 +112,73 @@ public class GroupCreateDialog extends DialogBox { outer.add(inner); - // Create the 'Create/Update' button, along with a listener that hides the dialog - // when the button is clicked and quits the application. - String okLabel = "Create"; - final Button ok = new Button(okLabel, new ClickHandler() { - @Override - public void onClick(ClickEvent event) { - createGroup(); - closeDialog(); - } - }); - ok.addStyleName("button"); - outer.add(ok); + // Create the 'Create/Update' button, along with a listener that hides the dialog + // when the button is clicked and quits the application. + String okLabel = "Create"; + final Button ok = new Button(okLabel, new ClickHandler() { + @Override + public void onClick(ClickEvent event) { + createGroup(); + closeDialog(); + } + }); + ok.addStyleName("button"); + outer.add(ok); outer.setCellHorizontalAlignment(inner, HasHorizontalAlignment.ALIGN_CENTER); setWidget(outer); - } - - @Override - public void center() { - super.center(); - groupName.setFocus(true); - } - - @Override - protected void onPreviewNativeEvent(NativePreviewEvent preview) { - super.onPreviewNativeEvent(preview); - - NativeEvent evt = preview.getNativeEvent(); - if (evt.getType().equals(KeyDownEvent.getType().getName())) - // Use the popup's key preview hooks to close the dialog when either - // enter or escape is pressed. - switch (evt.getKeyCode()) { - case KeyCodes.KEY_ENTER: - createGroup(); + } + + @Override + public void center() { + super.center(); + groupNameTextBox.setFocus(true); + } + + @Override + protected void onPreviewNativeEvent(NativePreviewEvent preview) { + super.onPreviewNativeEvent(preview); + + NativeEvent evt = preview.getNativeEvent(); + if(evt.getType().equals(KeyDownEvent.getType().getName())) + // Use the popup's key preview hooks to close the dialog when either + // enter or escape is pressed. + { + switch(evt.getKeyCode()) { + case KeyCodes.KEY_ENTER: + createGroup(); + closeDialog(); + break; + case KeyCodes.KEY_ESCAPE: closeDialog(); - break; - case KeyCodes.KEY_ESCAPE: - closeDialog(); - break; - } - } - - - /** - * Enables IE selection prevention and hides the dialog - * (we disable the prevention on creation of the dialog) - */ - public void closeDialog() { - Pithos.preventIESelection(); - hide(); - if (callback != null) - callback.execute(); - } - - /** - * Generate an RPC request to create a new folder. - */ - void createGroup() { - String name = groupName.getText().trim(); - if (name.length() == 0) - return; - Group group = app.addGroup(name); - - new AddUserCommand(app, null, group).execute(); - } + break; + } + } + } + + + /** + * Enables IE selection prevention and hides the dialog + * (we disable the prevention on creation of the dialog) + */ + public void closeDialog() { + Pithos.preventIESelection(); + hide(); + if(callback != null) { + callback.execute(); + } + } + + /** + * Generate an RPC request to create a new folder. + */ + void createGroup() { + final String groupName = groupNameTextBox.getText().trim(); + if(groupName.length() == 0) { + return; + } + Group group = app.addGroup(groupName); + + new AddUserCommand(app, null, group).execute(); + } } diff --git a/src/gr/grnet/pithos/web/client/PermissionsList.java b/src/gr/grnet/pithos/web/client/PermissionsList.java index 2c8c40c..4f3a26f 100644 --- a/src/gr/grnet/pithos/web/client/PermissionsList.java +++ b/src/gr/grnet/pithos/web/client/PermissionsList.java @@ -34,9 +34,6 @@ */ 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; @@ -49,14 +46,11 @@ import com.google.gwt.event.logical.shared.ValueChangeHandler; 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; @@ -146,7 +140,7 @@ public class PermissionsList extends Composite { new UpdateUserCatalogs(app, userID) { @Override public void onSuccess(UserCatalogs requestedUserCatalogs, UserCatalogs updatedUserCatalogs) { - final String displayName = updatedUserCatalogs.getDisplayName(userID); + final String displayName = updatedUserCatalogs.getUserDisplayName(userID); permTable.setHTML( ii, 0, diff --git a/src/gr/grnet/pithos/web/client/Pithos.java b/src/gr/grnet/pithos/web/client/Pithos.java index 16eef94..bec05d5 100644 --- a/src/gr/grnet/pithos/web/client/Pithos.java +++ b/src/gr/grnet/pithos/web/client/Pithos.java @@ -125,16 +125,20 @@ public class Pithos implements EntryPoint, ResizeHandler { } public String getCurrentUserDisplayNameOrID() { - final String displayName = userCatalogs.getDisplayName(getUserID()); + final String displayName = userCatalogs.getUserDisplayName(getUserID()); return displayName == null ? getUserID() : displayName; } public boolean hasUserDisplayNameForID(String userID) { - return userCatalogs.getDisplayName(userID) != null; + return userCatalogs.getUserDisplayName(userID) != null; + } + + public boolean hasUserIDForDisplayName(String displayName) { + return userCatalogs.getUserID(displayName) != null; } public String getUserDisplayNameForID(String userID) { - return userCatalogs.getDisplayName(userID); + return userCatalogs.getUserDisplayName(userID); } public String getUserIDForDisplayName(String displayName) { @@ -160,7 +164,7 @@ public class Pithos implements EntryPoint, ResizeHandler { } final List filtered = new ArrayList(); for(String userID : userIDs) { - if(!this.userCatalogs.hasID(userID)) { + if(!this.userCatalogs.hasUserID(userID)) { filtered.add(userID); } } @@ -332,9 +336,9 @@ public class Pithos implements EntryPoint, ResizeHandler { } }-*/; - 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) { @@ -549,7 +553,7 @@ public class Pithos implements EntryPoint, ResizeHandler { return true; } - HeadRequest head = new HeadRequest(Folder.class, getApiPath(), f.getOwnerID(), "/" + f.getContainer()) { + HeadRequest head = new HeadRequest(Pithos.this, Folder.class, getApiPath(), f.getOwnerID(), "/" + f.getContainer()) { @Override public void onSuccess(Folder _result) { @@ -706,9 +710,10 @@ public class Pithos implements EntryPoint, ResizeHandler { } public void fetchAccount(final Command callback) { + LOG("Pithos::fetchAccount(), callback = ", callback); String path = "?format=json"; - GetRequest getAccount = new GetRequest(AccountResource.class, getApiPath(), userID, path) { + GetRequest getAccount = new GetRequest(this, AccountResource.class, getApiPath(), userID, path) { @Override public void onSuccess(AccountResource _result) { account = _result; @@ -741,7 +746,7 @@ public class Pithos implements EntryPoint, ResizeHandler { } public void updateStatistics() { - HeadRequest headAccount = new HeadRequest(AccountResource.class, getApiPath(), userID, "", account) { + HeadRequest headAccount = new HeadRequest(this, AccountResource.class, getApiPath(), userID, "", account) { @Override public void onSuccess(AccountResource _result) { @@ -771,7 +776,7 @@ public class Pithos implements EntryPoint, ResizeHandler { protected void createHomeContainer(final AccountResource _account, final Command callback) { String path = "/" + Const.HOME_CONTAINER; - PutRequest createPithos = new PutRequest(getApiPath(), getUserID(), path) { + PutRequest createPithos = new PutRequest(this, getApiPath(), getUserID(), path) { @Override public void onSuccess(Resource result) { if(!_account.hasTrashContainer()) { @@ -805,7 +810,7 @@ public class Pithos implements EntryPoint, ResizeHandler { protected void createTrashContainer(final Command callback) { String path = "/" + Const.TRASH_CONTAINER; - PutRequest createPithos = new PutRequest(getApiPath(), getUserID(), path) { + PutRequest createPithos = new PutRequest(this, getApiPath(), getUserID(), path) { @Override public void onSuccess(Resource result) { fetchAccount(callback); @@ -972,7 +977,7 @@ public class Pithos implements EntryPoint, ResizeHandler { final PleaseWaitPopup pwp = new PleaseWaitPopup(); pwp.center(); String path = "/" + folder.getContainer() + "/" + folder.getPrefix() + "?delimiter=/" + "&t=" + System.currentTimeMillis(); - DeleteRequest deleteFolder = new DeleteRequest(getApiPath(), folder.getOwnerID(), path) { + DeleteRequest deleteFolder = new DeleteRequest(this, getApiPath(), folder.getOwnerID(), path) { @Override protected void onUnauthorized(Response response) { @@ -1026,7 +1031,7 @@ public class Pithos implements EntryPoint, ResizeHandler { if(iter.hasNext()) { File file = iter.next(); String path = targetUri + "/" + file.getName(); - PutRequest copyFile = new PutRequest(getApiPath(), targetUsername, path) { + PutRequest copyFile = new PutRequest(this, getApiPath(), targetUsername, path) { @Override public void onSuccess(Resource result) { copyFiles(iter, targetUsername, targetUri, callback); @@ -1064,7 +1069,7 @@ public class Pithos implements EntryPoint, ResizeHandler { public void copyFolder(final Folder f, final String targetUsername, final String targetUri, boolean move, final Command callback) { String path = targetUri + "?delimiter=/"; - PutRequest copyFolder = new PutRequest(getApiPath(), targetUsername, path) { + PutRequest copyFolder = new PutRequest(this, getApiPath(), targetUsername, path) { @Override public void onSuccess(Resource result) { if(callback != null) { @@ -1121,11 +1126,11 @@ public class Pithos implements EntryPoint, ResizeHandler { groupTreeView.updateGroupNode(null); } - public Group addGroup(String groupname) { - Group newGroup = new Group(groupname); - account.addGroup(newGroup); + public Group addGroup(String groupName) { + final Group group = new Group(groupName); + account.addGroup(group); groupTreeView.updateGroupNode(null); - return newGroup; + return group; } public void removeGroup(Group group) { @@ -1278,7 +1283,7 @@ public class Pithos implements EntryPoint, ResizeHandler { } } else { - HeadRequest headFolder = new HeadRequest(Folder.class, getApiPath(), folder.getOwnerID(), folder.getUri(), folder) { + HeadRequest headFolder = new HeadRequest(this, Folder.class, getApiPath(), folder.getOwnerID(), folder.getUri(), folder) { @Override public void onSuccess(Folder _result) { @@ -1292,7 +1297,7 @@ public class Pithos implements EntryPoint, ResizeHandler { if(t instanceof RestException) { if(((RestException) t).getHttpStatusCode() == Response.SC_NOT_FOUND) { final String path = folder.getUri(); - PutRequest newFolder = new PutRequest(getApiPath(), folder.getOwnerID(), path) { + PutRequest newFolder = new PutRequest(Pithos.this, getApiPath(), folder.getOwnerID(), path) { @Override public void onSuccess(Resource _result) { scheduleFolderHeadCommand(folder, callback); @@ -1347,7 +1352,7 @@ public class Pithos implements EntryPoint, ResizeHandler { } public void scheduleFileHeadCommand(File f, final Command callback) { - HeadRequest headFile = new HeadRequest(File.class, getApiPath(), f.getOwnerID(), f.getUri(), f) { + HeadRequest headFile = new HeadRequest(this, File.class, getApiPath(), f.getOwnerID(), f.getUri(), f) { @Override public void onSuccess(File _result) { @@ -1461,7 +1466,7 @@ public class Pithos implements EntryPoint, ResizeHandler { public void emptyContainer(final Folder container) { String path = "/" + container.getName() + "?delimiter=/"; - DeleteRequest delete = new DeleteRequest(getApiPath(), getUserID(), path) { + DeleteRequest delete = new DeleteRequest(this, getApiPath(), getUserID(), path) { @Override protected void onUnauthorized(Response response) { diff --git a/src/gr/grnet/pithos/web/client/Resource.java b/src/gr/grnet/pithos/web/client/Resource.java index 150f3a2..fd013eb 100644 --- a/src/gr/grnet/pithos/web/client/Resource.java +++ b/src/gr/grnet/pithos/web/client/Resource.java @@ -116,10 +116,10 @@ public abstract class Resource { }-*/; @SuppressWarnings("unchecked") - public static T createFromResponse(Class aClass, String owner, Response response, T result) { + public static T createFromResponse(Pithos app, Class aClass, String owner, Response response, T result) { T result1 = null; if(aClass.equals(AccountResource.class)) { - result1 = (T) AccountResource.createFromResponse(owner, response, (AccountResource) result); + result1 = (T) AccountResource.createFromResponse(app, owner, response, (AccountResource) result); } else if(aClass.equals(Folder.class)) { result1 = (T) Folder.createFromResponse(owner, response, (Folder) result); diff --git a/src/gr/grnet/pithos/web/client/VersionsList.java b/src/gr/grnet/pithos/web/client/VersionsList.java index 88f8aa2..66d4e6b 100644 --- a/src/gr/grnet/pithos/web/client/VersionsList.java +++ b/src/gr/grnet/pithos/web/client/VersionsList.java @@ -132,7 +132,7 @@ public class VersionsList extends Composite { void restoreVersion(int version) { String path = file.getUri() + "?update="; - PostRequest restoreVersion = new PostRequest(app.getApiPath(), file.getOwnerID(), path) { + PostRequest restoreVersion = new PostRequest(app, app.getApiPath(), file.getOwnerID(), path) { @Override public void onSuccess(Resource result) { diff --git a/src/gr/grnet/pithos/web/client/catalog/UpdateUserCatalogs.java b/src/gr/grnet/pithos/web/client/catalog/UpdateUserCatalogs.java index 8640ae2..645905e 100644 --- a/src/gr/grnet/pithos/web/client/catalog/UpdateUserCatalogs.java +++ b/src/gr/grnet/pithos/web/client/catalog/UpdateUserCatalogs.java @@ -60,4 +60,8 @@ public class UpdateUserCatalogs implements Scheduler.ScheduledCommand { public void scheduleDeferred() { Scheduler.get().scheduleDeferred(this); } + + public void scheduleEntry() { + Scheduler.get().scheduleEntry(this); + } } diff --git a/src/gr/grnet/pithos/web/client/catalog/UserCatalogs.java b/src/gr/grnet/pithos/web/client/catalog/UserCatalogs.java index 7a58247..4fb2a6a 100644 --- a/src/gr/grnet/pithos/web/client/catalog/UserCatalogs.java +++ b/src/gr/grnet/pithos/web/client/catalog/UserCatalogs.java @@ -45,20 +45,20 @@ public class UserCatalogs implements Iterable>{ ); } - public boolean hasID(String id) { + public boolean hasUserID(String id) { return id2name.containsKey(id); } - public boolean hasName(String name) { - return name2id.containsKey(name); + public boolean hasUserDisplayName(String displayName) { + return name2id.containsKey(displayName); } - public String getDisplayName(String id) { - return id2name.get(id); + public String getUserDisplayName(String userID) { + return id2name.get(userID); } - public String getUserID(String name) { - return name2id.get(name); + public String getUserID(String displayName) { + return name2id.get(displayName); } @Override diff --git a/src/gr/grnet/pithos/web/client/commands/DeleteGroupCommand.java b/src/gr/grnet/pithos/web/client/commands/DeleteGroupCommand.java index d23cbba..456cc06 100644 --- a/src/gr/grnet/pithos/web/client/commands/DeleteGroupCommand.java +++ b/src/gr/grnet/pithos/web/client/commands/DeleteGroupCommand.java @@ -34,6 +34,7 @@ */ package gr.grnet.pithos.web.client.commands; +import gr.grnet.pithos.web.client.Const; import gr.grnet.pithos.web.client.Pithos; import gr.grnet.pithos.web.client.Resource; import gr.grnet.pithos.web.client.grouptree.Group; @@ -75,7 +76,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.getUserID(), path) { + PostRequest updateGroup = new PostRequest(app, app.getApiPath(), app.getUserID(), path) { @Override public void onSuccess(Resource result) { @@ -98,8 +99,8 @@ public class DeleteGroupCommand implements Command { app.sessionExpired(); } }; - updateGroup.setHeader("X-Auth-Token", app.getUserToken()); - updateGroup.setHeader("X-Account-Group-" + URL.encodePathSegment(group.getName()), "~"); + updateGroup.setHeader(Const.X_AUTH_TOKEN, app.getUserToken()); + updateGroup.setHeader(Const.X_ACCOUNT_GROUP_ + URL.encodePathSegment(group.getName()), "~"); Scheduler.get().scheduleDeferred(updateGroup); } } diff --git a/src/gr/grnet/pithos/web/client/commands/PasteCommand.java b/src/gr/grnet/pithos/web/client/commands/PasteCommand.java index 1f1c486..ccbcda8 100644 --- a/src/gr/grnet/pithos/web/client/commands/PasteCommand.java +++ b/src/gr/grnet/pithos/web/client/commands/PasteCommand.java @@ -137,7 +137,7 @@ public class PasteCommand implements Command { if (iter.hasNext()) { File file = iter.next(); String path = folder.getUri() + "/" + file.getName(); - PutRequest copyFile = new PutRequest(app.getApiPath(), folder.getOwnerID(), path) { + PutRequest copyFile = new PutRequest(app, app.getApiPath(), folder.getOwnerID(), path) { @Override public void onSuccess(Resource result) { moveFiles(iter, callback); diff --git a/src/gr/grnet/pithos/web/client/commands/RemoveUserCommand.java b/src/gr/grnet/pithos/web/client/commands/RemoveUserCommand.java index 0edfb9c..d39a3ab 100644 --- a/src/gr/grnet/pithos/web/client/commands/RemoveUserCommand.java +++ b/src/gr/grnet/pithos/web/client/commands/RemoveUserCommand.java @@ -34,93 +34,96 @@ */ package gr.grnet.pithos.web.client.commands; -import gr.grnet.pithos.web.client.Pithos; -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; -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.ui.PopupPanel; +import gr.grnet.pithos.web.client.Const; +import gr.grnet.pithos.web.client.Pithos; +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; +import gr.grnet.pithos.web.client.rest.RestException; /** * Display the 'new folder' dialog for creating a new folder. - * */ public class RemoveUserCommand implements Command { - private PopupPanel containerPanel; + private PopupPanel containerPanel; User user; Pithos app; - /** - * @param aContainerPanel - */ - public RemoveUserCommand(Pithos _app, PopupPanel aContainerPanel, User _user){ + /** + * @param aContainerPanel + */ + public RemoveUserCommand(Pithos _app, PopupPanel aContainerPanel, User _user) { app = _app; - containerPanel = aContainerPanel; - user = _user; - } + containerPanel = aContainerPanel; + user = _user; + } + + @Override + public void execute() { + if(containerPanel != null) { + containerPanel.hide(); + } + final String groupName = user.getGroup(); + final Group group = app.getAccount().getGroup(groupName); + if(group == null) { + return; + } + group.removeUser(user); + String path = "?update="; + PostRequest updateGroup = new PostRequest(app, app.getApiPath(), app.getUserID(), path) { + + @Override + public void onSuccess(Resource result) { + app.fetchAccount(new Command() { + + @Override + public void execute() { + Group updatedGroup2 = app.getAccount().getGroup(groupName); + if(updatedGroup2 != null) { + app.updateGroupNode(updatedGroup2); + } + else { + app.updateGroupNode(null); + } + } + }); + } - @Override - public void execute() { - if (containerPanel != null) - containerPanel.hide(); - final String groupName = user.getGroup(); - final Group group = app.getAccount().getGroup(groupName); - if (group == null) - return; - group.removeMember(user.getName()); - String path = "?update="; - PostRequest updateGroup = new PostRequest(app.getApiPath(), app.getUserID(), path) { - - @Override - public void onSuccess(Resource result) { - app.fetchAccount(new Command() { - - @Override - public void execute() { - Group updatedGroup2 = app.getAccount().getGroup(groupName); - if (updatedGroup2 != null) - app.updateGroupNode(updatedGroup2); - else { - app.updateGroupNode(null); - } - } - }); - } - - @Override - public void onError(Throwable t) { - GWT.log("", t); - app.setError(t); - if (t instanceof RestException) { - app.displayError("Unable to update group:" + ((RestException) t).getHttpStatusText()); - } - else - app.displayError("System error updating group:" + t.getMessage()); - } + @Override + public void onError(Throwable t) { + GWT.log("", t); + app.setError(t); + if(t instanceof RestException) { + app.displayError("Unable to update group:" + ((RestException) t).getHttpStatusText()); + } + else { + app.displayError("System error updating group:" + t.getMessage()); + } + } - @Override - protected void onUnauthorized(Response response) { - app.sessionExpired(); - } - }; - updateGroup.setHeader("X-Auth-Token", app.getUserToken()); - String groupMembers = ""; - if (!group.getMembers().isEmpty()) { - for (String u : group.getMembers()) - groupMembers += (URL.encodePathSegment(u) + ","); - } - else - groupMembers = "~"; - updateGroup.setHeader("X-Account-Group-" + URL.encodePathSegment(group.getName()), groupMembers); - Scheduler.get().scheduleDeferred(updateGroup); - } + @Override + protected void onUnauthorized(Response response) { + app.sessionExpired(); + } + }; + updateGroup.setHeader(Const.X_AUTH_TOKEN, app.getUserToken()); + final String groupMembers; + if(!group.getUsers().isEmpty()) { + groupMembers = group.encodeUserIDsForXAccountGroup(); + } + else { + groupMembers = "~"; + } + updateGroup.setHeader(Const.X_ACCOUNT_GROUP_ + URL.encodePathSegment(group.getName()), groupMembers); + Scheduler.get().scheduleDeferred(updateGroup); + } } diff --git a/src/gr/grnet/pithos/web/client/commands/RestoreTrashCommand.java b/src/gr/grnet/pithos/web/client/commands/RestoreTrashCommand.java index 9f19835..ff8d56a 100644 --- a/src/gr/grnet/pithos/web/client/commands/RestoreTrashCommand.java +++ b/src/gr/grnet/pithos/web/client/commands/RestoreTrashCommand.java @@ -117,7 +117,7 @@ public class RestoreTrashCommand implements Command { if (iter.hasNext()) { File file = iter.next(); String path = "/" + Const.HOME_CONTAINER + "/" + file.getPath(); - PutRequest untrashFile = new PutRequest(app.getApiPath(), app.getUserID(), path) { + PutRequest untrashFile = new PutRequest(app, app.getApiPath(), app.getUserID(), path) { @Override public void onSuccess(Resource result) { untrashFiles(iter, callback); diff --git a/src/gr/grnet/pithos/web/client/commands/ToTrashCommand.java b/src/gr/grnet/pithos/web/client/commands/ToTrashCommand.java index f08bc52..b5ece80 100644 --- a/src/gr/grnet/pithos/web/client/commands/ToTrashCommand.java +++ b/src/gr/grnet/pithos/web/client/commands/ToTrashCommand.java @@ -127,7 +127,7 @@ public class ToTrashCommand implements Command{ if (iter.hasNext()) { File file = iter.next(); String path = "/" + Const.TRASH_CONTAINER + "/" + file.getPath(); - PutRequest trashFile = new PutRequest(app.getApiPath(), app.getUserID(), path) { + PutRequest trashFile = new PutRequest(app, app.getApiPath(), app.getUserID(), path) { @Override public void onSuccess(Resource result) { trashFiles(iter, callback); diff --git a/src/gr/grnet/pithos/web/client/foldertree/AccountResource.java b/src/gr/grnet/pithos/web/client/foldertree/AccountResource.java index 8f835bf..e4011a0 100644 --- a/src/gr/grnet/pithos/web/client/foldertree/AccountResource.java +++ b/src/gr/grnet/pithos/web/client/foldertree/AccountResource.java @@ -35,14 +35,6 @@ package gr.grnet.pithos.web.client.foldertree; -import gr.grnet.pithos.web.client.Const; -import gr.grnet.pithos.web.client.Resource; -import gr.grnet.pithos.web.client.grouptree.Group; - -import java.util.ArrayList; -import java.util.Date; -import java.util.List; - import com.google.gwt.http.client.Header; import com.google.gwt.http.client.Response; import com.google.gwt.http.client.URL; @@ -53,12 +45,22 @@ 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.Const; +import gr.grnet.pithos.web.client.Pithos; +import gr.grnet.pithos.web.client.Resource; +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 gr.grnet.pithos.web.client.grouptree.User; + +import java.util.*; /** * Created by IntelliJ IDEA. User: chstath Date: 5/19/11 Time: 2:55 PM To change this template use File | Settings | * File Templates. */ public class AccountResource extends Resource { + private final Pithos app; private long numberOfContainers = 0; @@ -71,13 +73,17 @@ public class AccountResource extends Resource { private Date lastLogin = null; private Date lastModified = null; - + private List containers = new ArrayList(); private Date currentLogin = null; private List groups = new ArrayList(); + public AccountResource(Pithos app) { + this.app = app; + } + public long getQuota() { return quota; } @@ -103,7 +109,7 @@ public class AccountResource extends Resource { } @Override - public Date getLastModified() { + public Date getLastModified() { return lastModified; } @@ -139,145 +145,208 @@ public class AccountResource extends Resource { this.currentLogin = currentLogin; } + private void doAddUsersByIDs(final List userIDs, final String groupName) { + app.LOG("AccountResource::doAddUsersByIDs(), group = ", groupName); + final Group group = new Group(groupName); + for(String userID : userIDs) { + final String userDisplayName = app.getUserDisplayNameForID(userID); + final User user = new User(userID, userDisplayName, groupName); + group.addUser(user); + app.LOG("AccountResource::doAddUsersByIDs(), user = (", userID, ", ", userDisplayName, ")"); + + } + groups.add(group); + + } + public void populate(String owner, Response response) { DateTimeFormat df = DateTimeFormat.getFormat(PredefinedFormat.RFC_2822); groups.clear(); - for (Header h : response.getHeaders()) { - if (h != null) { - String name = h.getName(); - if (name.startsWith("X-Account-Group-")) { - String groupName = URL.decodePathSegment(name.substring("X-Account-Group-".length())); - Group g = new Group(groupName); - String[] members = h.getValue().split(","); - for (String s : members) - g.addMember(URL.decodePathSegment(s).trim()); - groups.add(g); - } - else if (name.equals("X-Account-Container-Count")) { - numberOfContainers = Long.valueOf(h.getValue()); - } - else if (name.equals("X-Account-Object-Count")) { - numberOfObjects = Long.valueOf(h.getValue()); - } - else if (name.equals("X-Account-Bytes-Used")) { - bytesUsed = Long.valueOf(h.getValue()); - } - else if (name.equals("X-Account-Policy-Quota")) { - quota = Long.valueOf(h.getValue()); - } - else if (name.equals("X-Account-Last-Login")) { - lastLogin = df.parse(h.getValue()); - } - else if (name.equals("Last-Modified")) { - lastModified = df.parse(h.getValue()); - } - } + + final Map> parsedGroups = new HashMap>(); + + for(Header h : response.getHeaders()) { + if(h != null) { + String name = h.getName(); + if(name.startsWith(Const.X_ACCOUNT_GROUP_)) { + final String groupName = URL.decodePathSegment(name.substring(Const.X_ACCOUNT_GROUP_.length())); + final String[] users = h.getValue().split(","); + final List userIDs = new ArrayList(); + for(String user : users) { + final String userID = URL.decodePathSegment(user).trim(); + userIDs.add(userID); + } + parsedGroups.put(groupName, userIDs); + } + else if(name.equals(Const.X_ACCOUNT_CONTAINER_COUNT)) { + numberOfContainers = Long.valueOf(h.getValue()); + } + else if(name.equals(Const.X_ACCOUNT_OBJECT_COUNT)) { + numberOfObjects = Long.valueOf(h.getValue()); + } + else if(name.equals(Const.X_ACCOUNT_BYTES_USED)) { + bytesUsed = Long.valueOf(h.getValue()); + } + else if(name.equals(Const.X_ACCOUNT_POLICY_QUOTA)) { + quota = Long.valueOf(h.getValue()); + } + else if(name.equals(Const.X_ACCOUNT_LAST_LOGIN)) { + lastLogin = df.parse(h.getValue()); + } + else if(name.equals(Const.LAST_MODIFIED)) { + lastModified = df.parse(h.getValue()); + } + } + } + + // Gather all unknown users for the groups + final List userIDsWithUnknownDisplayName = new ArrayList(); + for(Map.Entry> parsedGroupEntry : parsedGroups.entrySet()) { + final List groupUserIDs = parsedGroupEntry.getValue(); + userIDsWithUnknownDisplayName.addAll(app.filterUserIDsWithUnknownDisplayName(groupUserIDs)); + } + if(userIDsWithUnknownDisplayName.size() == 0) { + for(Map.Entry> parsedGroupEntry : parsedGroups.entrySet()) { + final String groupName = parsedGroupEntry.getKey(); + final List groupUserIDs = parsedGroupEntry.getValue(); + doAddUsersByIDs(groupUserIDs, groupName); + } + } + else { + new UpdateUserCatalogs(app, userIDsWithUnknownDisplayName) { + @Override + public void onSuccess(UserCatalogs requestedUserCatalogs, UserCatalogs updatedUserCatalogs) { + for(Map.Entry> parsedGroupEntry : parsedGroups.entrySet()) { + final String groupName = parsedGroupEntry.getKey(); + final List groupUserIDs = parsedGroupEntry.getValue(); + doAddUsersByIDs(groupUserIDs, groupName); + } + } + }.scheduleEntry(); } - if (response.getText() != null && response.getText().length() > 0) { - containers.clear(); - JSONValue json = JSONParser.parseStrict(response.getText()); - JSONArray array = json.isArray(); - if (array != null) { - for (int i=0; i 0) { + containers.clear(); + JSONValue json = JSONParser.parseStrict(response.getText()); + JSONArray array = json.isArray(); + if(array != null) { + for(int i = 0; i < array.size(); i++) { + JSONObject o = array.get(i).isObject(); + if(o != null) { + Folder f = new Folder(); + f.populate(null, o, owner, null); + containers.add(f); + } + } + } } } - public static AccountResource createFromResponse(String owner, Response response, AccountResource result) { - AccountResource a; - if (result == null) - a = new AccountResource(); - else - a = result; + public static AccountResource createFromResponse(Pithos app, String owner, Response response, AccountResource result) { + AccountResource a; + if(result == null) { + a = new AccountResource(app); + } + else { + a = result; + } a.populate(owner, response); return a; } - private String getSize(Long size, Double division){ - Double res = Double.valueOf(size.toString())/division; - NumberFormat nf = NumberFormat.getFormat("######.#"); + private String getSize(Long size, Double division) { + Double res = Double.valueOf(size.toString()) / division; + NumberFormat nf = NumberFormat.getFormat(Const.NUMBER_FORMAT_1); return nf.format(res); } public String getFileSizeAsString() { - if (bytesUsed < 1024) + if(bytesUsed < 1024) { return String.valueOf(bytesUsed) + "B"; - else if (bytesUsed < 1024*1024) + } + else if(bytesUsed < 1024 * 1024) { return getSize(bytesUsed, 1024D) + "KB"; - else if (bytesUsed < 1024*1024*1024) - return getSize(bytesUsed,(1024D*1024D)) + "MB"; - return getSize(bytesUsed , (1024D*1024D*1024D)) + "GB"; + } + else if(bytesUsed < 1024 * 1024 * 1024) { + return getSize(bytesUsed, (1024D * 1024D)) + "MB"; + } + return getSize(bytesUsed, (1024D * 1024D * 1024D)) + "GB"; } public String getQuotaAsString() { - if (quota < 1024) + if(quota < 1024) { return String.valueOf(quota) + "B"; - else if (quota < 1024 * 1024) + } + else if(quota < 1024 * 1024) { return getSize(quota, 1024D) + "KB"; - else if (quota < 1024 * 1024 * 1024) - return getSize(quota,(1024D * 1024D)) + "MB"; - return getSize(quota , (1024D * 1024D * 1024D)) + "GB"; + } + else if(quota < 1024 * 1024 * 1024) { + return getSize(quota, (1024D * 1024D)) + "MB"; + } + return getSize(quota, (1024D * 1024D * 1024D)) + "GB"; } public List getGroups() { return groups; } - + public boolean hasHomeContainer() { - for (Folder f : containers) - if (f.getName().equals(Const.HOME_CONTAINER)) - return true; - return false; + for(Folder f : containers) { + if(f.getName().equals(Const.HOME_CONTAINER)) { + return true; + } + } + return false; } public boolean hasTrashContainer() { - for (Folder f : containers) - if (f.getName().equals(Const.TRASH_CONTAINER)) - return true; - return false; + for(Folder f : containers) { + if(f.getName().equals(Const.TRASH_CONTAINER)) { + return true; + } + } + return false; + } + + public void addGroup(Group group) { + groups.add(group); + } + + public void removeGroup(Group group) { + groups.remove(group); } - public void addGroup(Group newGroup) { - groups.add(newGroup); - } - - public void removeGroup(Group group) { - groups.remove(group); - } - - public Folder getTrash() { - for (Folder c : containers) { - if (c.getName().equals(Const.TRASH_CONTAINER)) - return c; - } - return null; - } - - public double getUsedPercentage() { - if (quota == 0) - return 0; - return ((double) bytesUsed) / quota; - } - - public Folder getPithos() { - for (Folder f : containers) - if (f.getName().equals(Const.HOME_CONTAINER)) - return f; - return null; - } - - public Group getGroup(String groupName) { - for (Group g : groups) - if (g.getName().equalsIgnoreCase(groupName)) - return g; - return null; - } + public Folder getTrash() { + for(Folder c : containers) { + if(c.getName().equals(Const.TRASH_CONTAINER)) { + return c; + } + } + return null; + } + + public double getUsedPercentage() { + if(quota == 0) { + return 0; + } + return ((double) bytesUsed) / quota; + } + + public Folder getPithos() { + for(Folder f : containers) { + if(f.getName().equals(Const.HOME_CONTAINER)) { + return f; + } + } + return null; + } + + public Group getGroup(String groupName) { + for(Group g : groups) { + if(g.getName().equalsIgnoreCase(groupName)) { + return g; + } + } + return null; + } } diff --git a/src/gr/grnet/pithos/web/client/foldertree/FolderTreeViewModel.java b/src/gr/grnet/pithos/web/client/foldertree/FolderTreeViewModel.java index 5e3f56b..fb4d31f 100644 --- a/src/gr/grnet/pithos/web/client/foldertree/FolderTreeViewModel.java +++ b/src/gr/grnet/pithos/web/client/foldertree/FolderTreeViewModel.java @@ -152,7 +152,7 @@ public class FolderTreeViewModel implements TreeViewModel { final Folder f = iter.next(); String path = "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + URL.encodeQueryString(f.getPrefix()); - GetRequest getFolder = new GetRequest(Folder.class, app.getApiPath(), f.getOwnerID(), path, f) { + GetRequest getFolder = new GetRequest(app, Folder.class, app.getApiPath(), f.getOwnerID(), path, f) { @Override public void onSuccess(Folder _result) { fetchFolder(iter, callback); @@ -236,7 +236,7 @@ public class FolderTreeViewModel implements TreeViewModel { public void fetchFolder(final Folder f, final ListDataProvider dataProvider, final boolean showfiles, final Command callback) { String path = "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + URL.encodeQueryString(f.getPrefix()); - GetRequest getFolder = new GetRequest(Folder.class, app.getApiPath(), f.getOwnerID(), path, f) { + GetRequest getFolder = new GetRequest(app, Folder.class, app.getApiPath(), f.getOwnerID(), path, f) { @Override public void onSuccess(final Folder _result) { if (showfiles) diff --git a/src/gr/grnet/pithos/web/client/grouptree/Group.java b/src/gr/grnet/pithos/web/client/grouptree/Group.java index d367048..aef15f5 100644 --- a/src/gr/grnet/pithos/web/client/grouptree/Group.java +++ b/src/gr/grnet/pithos/web/client/grouptree/Group.java @@ -36,30 +36,50 @@ package gr.grnet.pithos.web.client.grouptree; import java.util.ArrayList; +import java.util.Collections; import java.util.List; -public class Group { - private String name; +public final class Group { + private final String name; - private List members = new ArrayList(); + private final List users = new ArrayList(); - public Group(String _name) { - name = _name; + public Group(String name) { + this.name = name; } - public List getMembers() { - return members; + public List getUsers() { + return Collections.unmodifiableList(users); } public String getName() { return name; } - public void addMember(String user) { - members.add(user); + public void addUser(User user) { + this.users.add(user); } - public void removeMember(String username) { - members.remove(username); + public void removeUser(User user) { + this.users.remove(user); } + + public String encodeUserIDsForXAccountGroup() { + final StringBuilder sb = new StringBuilder(); + for(int i=0; i groupCell = new AbstractCell(ContextMenuEvent.getType().getName()) { + private Cell groupCell = new AbstractCell(ContextMenuEvent.getType().getName()) { - @Override - public void render(Context context, Group value, SafeHtmlBuilder sb) { + @Override + public void render(Context context, Group group, SafeHtmlBuilder sb) { String html = AbstractImagePrototype.create(GroupTreeView.images.group()).getHTML(); sb.appendHtmlConstant(html).appendHtmlConstant(" "); - sb.append(Templates.INSTANCE.nameSpan(value.getName())); - } - + sb.append(Templates.INSTANCE.nameSpan(group.getName())); + } + @Override public void onBrowserEvent(Cell.Context context, com.google.gwt.dom.client.Element parent, Group group, com.google.gwt.dom.client.NativeEvent event, com.google.gwt.cell.client.ValueUpdater valueUpdater) { - if (!group.equals(createGroup)) { - GroupTreeViewModel.this.groupSelectionModel.setSelected(group, true); - if (event.getType().equals(ContextMenuEvent.getType().getName())) { - GroupContextMenu menu = new GroupContextMenu(app, GroupTreeView.images, group); - menu.setPopupPosition(event.getClientX(), event.getClientY()); - menu.show(); - } - } + if(!group.equals(CreateGroupPlaceholder)) { + GroupTreeViewModel.this.groupSelectionModel.setSelected(group, true); + if(event.getType().equals(ContextMenuEvent.getType().getName())) { + GroupContextMenu menu = new GroupContextMenu(app, GroupTreeView.images, group); + menu.setPopupPosition(event.getClientX(), event.getClientY()); + menu.show(); + } + } } - }; + }; private Cell userCell = new AbstractCell(ContextMenuEvent.getType().getName()) { - @Override - public void render(Context context, User value, SafeHtmlBuilder sb) { + @Override + public void render(Context context, User user, final SafeHtmlBuilder sb) { String html = AbstractImagePrototype.create(GroupTreeView.images.user()).getHTML(); sb.appendHtmlConstant(html).appendHtmlConstant(" "); - sb.append(Templates.INSTANCE.nameSpan(value.getName())); - } + final String userDisplayName = user.getUserDisplayName(); + sb.append(Templates.INSTANCE.nameSpan(userDisplayName)); + } @Override public void onBrowserEvent(Cell.Context context, com.google.gwt.dom.client.Element parent, User user, com.google.gwt.dom.client.NativeEvent event, com.google.gwt.cell.client.ValueUpdater valueUpdater) { GroupTreeViewModel.this.userSelectionModel.setSelected(user, true); - if (event.getType().equals(ContextMenuEvent.getType().getName())) { + if(event.getType().equals(ContextMenuEvent.getType().getName())) { UserContextMenu menu = new UserContextMenu(app, GroupTreeView.images, user); menu.setPopupPosition(event.getClientX(), event.getClientY()); menu.show(); @@ -103,114 +105,127 @@ public class GroupTreeViewModel implements TreeViewModel { protected ListDataProvider groupsDataProvider = new ListDataProvider(); protected Map> userDataProviderMap = new HashMap>(); - + SingleSelectionModel groupSelectionModel; SingleSelectionModel userSelectionModel; - - final Group createGroup = new Group("Create new group..."); public GroupTreeViewModel(Pithos _app) { app = _app; - groupSelectionModel = new SingleSelectionModel(); - app.addSelectionModel(groupSelectionModel); - groupSelectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() { - - @Override - public void onSelectionChange(SelectionChangeEvent event) { - Group selected = groupSelectionModel.getSelectedObject(); - if (selected != null) { - app.deselectOthers(app.getGroupTreeView(), groupSelectionModel); - app.showFiles(new HashSet()); - app.disableUploadArea(); - app.upload.setEnabled(false); - app.showRelevantToolbarButtons(); - if (selected.equals(createGroup)) { - new CreateGroupCommand(app, null).execute(); - groupSelectionModel.setSelected(createGroup, false); - } - } - else { - if (app.getSelectedTree().equals(app.getGroupTreeView())) - app.setSelectedTree(null); - if (app.getSelectedTree() == null) - app.showRelevantToolbarButtons(); - } - } - }); - - userSelectionModel = new SingleSelectionModel(); - app.addSelectionModel(userSelectionModel); - userSelectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() { - - @Override - public void onSelectionChange(SelectionChangeEvent event) { - if (userSelectionModel.getSelectedObject() != null) { - app.deselectOthers(app.getGroupTreeView(), userSelectionModel); - app.showFiles(new HashSet()); - app.showRelevantToolbarButtons(); - } - else { - if (app.getSelectedTree().equals(app.getGroupTreeView())) - app.setSelectedTree(null); - if (app.getSelectedTree() == null) - app.showRelevantToolbarButtons(); - } - } - }); -} + groupSelectionModel = new SingleSelectionModel(); + app.addSelectionModel(groupSelectionModel); + groupSelectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() { + + @Override + public void onSelectionChange(SelectionChangeEvent event) { + Group selected = groupSelectionModel.getSelectedObject(); + if(selected != null) { + app.deselectOthers(app.getGroupTreeView(), groupSelectionModel); + app.showFiles(new HashSet()); + app.disableUploadArea(); + app.upload.setEnabled(false); + app.showRelevantToolbarButtons(); + if(selected.equals(CreateGroupPlaceholder)) { + new CreateGroupCommand(app, null).execute(); + groupSelectionModel.setSelected(CreateGroupPlaceholder, false); + } + } + else { + if(app.getSelectedTree().equals(app.getGroupTreeView())) { + app.setSelectedTree(null); + } + if(app.getSelectedTree() == null) { + app.showRelevantToolbarButtons(); + } + } + } + }); + + userSelectionModel = new SingleSelectionModel(); + app.addSelectionModel(userSelectionModel); + userSelectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() { + + @Override + public void onSelectionChange(SelectionChangeEvent event) { + if(userSelectionModel.getSelectedObject() != null) { + app.deselectOthers(app.getGroupTreeView(), userSelectionModel); + app.showFiles(new HashSet()); + app.showRelevantToolbarButtons(); + } + else { + if(app.getSelectedTree().equals(app.getGroupTreeView())) { + app.setSelectedTree(null); + } + if(app.getSelectedTree() == null) { + app.showRelevantToolbarButtons(); + } + } + } + }); + } @Override public NodeInfo getNodeInfo(T value) { - if (value == null) { - groupsDataProvider.getList().clear(); - groupsDataProvider.getList().addAll(app.getAccount().getGroups()); - groupsDataProvider.getList().add(createGroup); + app.LOG("GroupTreeViewModel::getNodeInfo(), value = ", value); + if(value == null) { + groupsDataProvider.getList().clear(); + groupsDataProvider.getList().addAll(app.getAccount().getGroups()); + groupsDataProvider.getList().add(CreateGroupPlaceholder); return new DefaultNodeInfo(groupsDataProvider, groupCell, groupSelectionModel, null); } - Group g = (Group) value; - if (userDataProviderMap.get(g) == null) { - userDataProviderMap.put(g, new ListDataProvider()); - } - final ListDataProvider dataProvider = userDataProviderMap.get(g); - dataProvider.getList().clear(); - for (String u : g.getMembers()) - dataProvider.getList().add(new User(u, g.getName())); - return new DefaultNodeInfo(dataProvider, userCell, userSelectionModel, null); + final Group group = (Group) value; + if(userDataProviderMap.get(group) == null) { + userDataProviderMap.put(group, new ListDataProvider()); + } + final ListDataProvider dataProvider = userDataProviderMap.get(group); + dataProvider.getList().clear(); + final List users = group.getUsers(); + for(User user : users) { + app.LOG("GroupTreeViewModel::getNodeInfo(), Add ", user); + dataProvider.getList().add(user); + } + + + return new DefaultNodeInfo(dataProvider, userCell, userSelectionModel, null); } - @Override + @Override public boolean isLeaf(Object o) { - if (o instanceof User) { - return true; + if(o instanceof User) { + return true; + } + else if(o instanceof Group) { + return ((Group) o).getUsers().isEmpty(); } - else if (o instanceof Group) - return ((Group) o).getMembers().isEmpty(); return false; } - - public void updateGroupNode(Group group) { - if (group == null) { - groupsDataProvider.getList().clear(); - groupsDataProvider.getList().addAll(app.getAccount().getGroups()); - groupsDataProvider.getList().add(createGroup); - } - else { - if (userDataProviderMap.get(group) == null) { - userDataProviderMap.put(group, new ListDataProvider()); - } - final ListDataProvider dataProvider = userDataProviderMap.get(group); - dataProvider.getList().clear(); - for (String u : group.getMembers()) - dataProvider.getList().add(new User(u, group.getName())); - } - } - - public Object getSelectedObject() { - if (groupSelectionModel.getSelectedObject() != null) - return groupSelectionModel.getSelectedObject(); - if (userSelectionModel.getSelectedObject() != null) - return userSelectionModel.getSelectedObject(); - return null; - } + + public void updateGroupNode(Group group) { + if(group == null) { + groupsDataProvider.getList().clear(); + groupsDataProvider.getList().addAll(app.getAccount().getGroups()); + groupsDataProvider.getList().add(CreateGroupPlaceholder); + } + else { + if(userDataProviderMap.get(group) == null) { + userDataProviderMap.put(group, new ListDataProvider()); + } + final ListDataProvider dataProvider = userDataProviderMap.get(group); + dataProvider.getList().clear(); + for(User user : group.getUsers()) { + app.LOG("GroupTreeViewModel::updateGroupNode(), group = ", group, ". Add ", user); + dataProvider.getList().add(user); + } + } + } + + public Object getSelectedObject() { + if(groupSelectionModel.getSelectedObject() != null) { + return groupSelectionModel.getSelectedObject(); + } + if(userSelectionModel.getSelectedObject() != null) { + return userSelectionModel.getSelectedObject(); + } + return null; + } } diff --git a/src/gr/grnet/pithos/web/client/grouptree/User.java b/src/gr/grnet/pithos/web/client/grouptree/User.java index 067fbd2..f6798ae 100644 --- a/src/gr/grnet/pithos/web/client/grouptree/User.java +++ b/src/gr/grnet/pithos/web/client/grouptree/User.java @@ -36,21 +36,59 @@ 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 userDisplayName; + private final String group; + + public User(String userID, String userDisplayName, String group) { + this.userID = userID; + this.userDisplayName = userDisplayName; + this.group = group; + } + + public String getUserID() { + return userID; } - public String getName() { - return name; + public String getUserDisplayName() { + return userDisplayName; } - public String getGroup() { + public String getGroup() { return group; } + + @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; + } + + @Override + public int hashCode() { + int result = userID != null ? userID.hashCode() : 0; + result = 31 * result + (group != null ? group.hashCode() : 0); + return result; + } + + @Override + public String toString() { + return "User(" + userID + ", " + userDisplayName + ", " + group + ")"; + } } diff --git a/src/gr/grnet/pithos/web/client/mysharedtree/MysharedTreeViewModel.java b/src/gr/grnet/pithos/web/client/mysharedtree/MysharedTreeViewModel.java index 87aca52..cfa6dea 100644 --- a/src/gr/grnet/pithos/web/client/mysharedtree/MysharedTreeViewModel.java +++ b/src/gr/grnet/pithos/web/client/mysharedtree/MysharedTreeViewModel.java @@ -119,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.getUserID(), path) { + GetRequest getAccount = new GetRequest(app, AccountResource.class, app.getApiPath(), app.getUserID(), path) { @Override public void onSuccess(final AccountResource _result) { firstLevelDataProvider.getList().clear(); @@ -170,7 +170,7 @@ public class MysharedTreeViewModel implements TreeViewModel { final Folder f = iter.next(); String path = "/" + f.getContainer() + "?format=json&shared=&public=&delimiter=/&prefix=" + URL.encodeQueryString(f.getPrefix()); - GetRequest getFolder = new GetRequest(Folder.class, app.getApiPath(), f.getOwnerID(), path, f) { + GetRequest getFolder = new GetRequest(app, Folder.class, app.getApiPath(), f.getOwnerID(), path, f) { @Override public void onSuccess(Folder _result) { fetchFolder(iter, callback); @@ -208,7 +208,7 @@ public class MysharedTreeViewModel implements TreeViewModel { public void fetchFolder(final Folder f, final boolean showfiles, final Command callback) { String path = "/" + f.getContainer() + "?format=json&shared=&public=" + URL.encodeQueryString(f.getPrefix()); - GetRequest getFolder = new GetRequest(Folder.class, app.getApiPath(), f.getOwnerID(), path, f) { + GetRequest getFolder = new GetRequest(app, Folder.class, app.getApiPath(), f.getOwnerID(), path, f) { @Override public void onSuccess(final Folder _result) { for (File file : _result.getFiles()) { diff --git a/src/gr/grnet/pithos/web/client/othersharedtree/OtherSharedTreeViewModel.java b/src/gr/grnet/pithos/web/client/othersharedtree/OtherSharedTreeViewModel.java index 1879b89..1c1a244 100644 --- a/src/gr/grnet/pithos/web/client/othersharedtree/OtherSharedTreeViewModel.java +++ b/src/gr/grnet/pithos/web/client/othersharedtree/OtherSharedTreeViewModel.java @@ -175,7 +175,7 @@ public class OtherSharedTreeViewModel implements TreeViewModel { // }-*/; private void fetchSharingUsers(final Command callback) { - GetRequest getSharingUsers = new GetRequest(SharingUsers.class, app.getApiPath(), "", "?format=json") { + GetRequest getSharingUsers = new GetRequest(app, SharingUsers.class, app.getApiPath(), "", "?format=json") { @Override public void onSuccess(final SharingUsers _result) { userLevelDataProviderForIDs.getList().clear(); @@ -285,7 +285,7 @@ public class OtherSharedTreeViewModel implements TreeViewModel { } private void fetchSharedContainers(final String userID, final ListDataProvider dataProvider, final Command callback) { - GetRequest getUserSharedContainers = new GetRequest(AccountResource.class, app.getApiPath(), userID, "?format=json") { + GetRequest getUserSharedContainers = new GetRequest(app, AccountResource.class, app.getApiPath(), userID, "?format=json") { @Override public void onSuccess(AccountResource _result) { @@ -330,7 +330,7 @@ public class OtherSharedTreeViewModel implements TreeViewModel { final Folder f = folderIterator.next(); String path = "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + URL.encodeQueryString(f.getPrefix()); - GetRequest getFolder = new GetRequest(Folder.class, app.getApiPath(), userID, path, f) { + GetRequest getFolder = new GetRequest(app, Folder.class, app.getApiPath(), userID, path, f) { @Override public void onSuccess(Folder _result) { dataProvider.getList().add(_result); @@ -376,7 +376,7 @@ public class OtherSharedTreeViewModel implements TreeViewModel { public void fetchFolder(final Folder f, final ListDataProvider dataProvider, final boolean showfiles, final Command callback) { String path = "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + URL.encodeQueryString(f.getPrefix()); - GetRequest getFolder = new GetRequest(Folder.class, app.getApiPath(), f.getOwnerID(), path, f) { + GetRequest getFolder = new GetRequest(app, Folder.class, app.getApiPath(), f.getOwnerID(), path, f) { @Override public void onSuccess(final Folder _result) { if(showfiles) { diff --git a/src/gr/grnet/pithos/web/client/rest/DeleteRequest.java b/src/gr/grnet/pithos/web/client/rest/DeleteRequest.java index 0194db0..bea8c44 100644 --- a/src/gr/grnet/pithos/web/client/rest/DeleteRequest.java +++ b/src/gr/grnet/pithos/web/client/rest/DeleteRequest.java @@ -35,6 +35,7 @@ package gr.grnet.pithos.web.client.rest; +import gr.grnet.pithos.web.client.Pithos; import gr.grnet.pithos.web.client.Resource; import java.util.HashMap; @@ -55,6 +56,8 @@ public abstract class DeleteRequest implements ScheduledCommand { protected static final int MAX_RETRIES = 3; + private final Pithos app; + protected int retries = 0; private String api; @@ -69,7 +72,8 @@ public abstract class DeleteRequest implements ScheduledCommand { public abstract void onError(Throwable t); - public DeleteRequest(String api, String owner, String path) { + public DeleteRequest(Pithos app, String api, String owner, String path) { + this.app = app; this.api = api; this.owner = owner; this.path = path; @@ -90,7 +94,7 @@ public abstract class DeleteRequest implements ScheduledCommand { @Override public Resource deserialize(Response response) { - return Resource.createFromResponse(Resource.class, owner, response, null); + return Resource.createFromResponse(app, Resource.class, owner, response, null); } @Override diff --git a/src/gr/grnet/pithos/web/client/rest/GetRequest.java b/src/gr/grnet/pithos/web/client/rest/GetRequest.java index e087800..ab5d519 100644 --- a/src/gr/grnet/pithos/web/client/rest/GetRequest.java +++ b/src/gr/grnet/pithos/web/client/rest/GetRequest.java @@ -35,6 +35,7 @@ package gr.grnet.pithos.web.client.rest; +import gr.grnet.pithos.web.client.Pithos; import gr.grnet.pithos.web.client.Resource; import java.util.HashMap; @@ -51,7 +52,9 @@ public abstract class GetRequest implements ScheduledCommand protected static final int MAX_RETRIES = 3; - protected int retries = 0; + protected int retries = 0; + + private final Pithos app; protected Class resourceClass; @@ -71,7 +74,8 @@ public abstract class GetRequest implements ScheduledCommand public abstract void onError(Throwable t); - public GetRequest(Class resourceClass, String api, String owner, String path, int okCode, T result) { + public GetRequest(Pithos app, Class resourceClass, String api, String owner, String path, int okCode, T result) { + this.app = app; this.resourceClass = resourceClass; this.api = api; this.owner = owner; @@ -80,12 +84,12 @@ public abstract class GetRequest implements ScheduledCommand this.result = result; } - public GetRequest(Class resourceClass, String api, String owner, String path) { - this(resourceClass, api, owner, path, -1, null); + public GetRequest(Pithos app, Class resourceClass, String api, String owner, String path) { + this(app, resourceClass, api, owner, path, -1, null); } - public GetRequest(Class resourceClass, String api, String owner, String path, T result) { - this(resourceClass, api, owner, path, -1, result); + public GetRequest(Pithos app, Class resourceClass, String api, String owner, String path, T result) { + this(app, resourceClass, api, owner, path, -1, result); } @Override @@ -108,7 +112,7 @@ public abstract class GetRequest implements ScheduledCommand @Override public T deserialize(Response response) { - return Resource.createFromResponse(resourceClass, owner, response, result); + return Resource.createFromResponse(app, resourceClass, owner, response, result); } @Override diff --git a/src/gr/grnet/pithos/web/client/rest/HeadRequest.java b/src/gr/grnet/pithos/web/client/rest/HeadRequest.java index 5b0f0fc..1148554 100644 --- a/src/gr/grnet/pithos/web/client/rest/HeadRequest.java +++ b/src/gr/grnet/pithos/web/client/rest/HeadRequest.java @@ -35,6 +35,7 @@ package gr.grnet.pithos.web.client.rest; +import gr.grnet.pithos.web.client.Pithos; import gr.grnet.pithos.web.client.Resource; import java.util.HashMap; @@ -51,6 +52,8 @@ public abstract class HeadRequest implements ScheduledComman protected static final int MAX_RETRIES = 3; + private final Pithos app; + protected int retries = 0; protected Class aClass; @@ -73,7 +76,8 @@ public abstract class HeadRequest implements ScheduledComman public abstract void onError(Throwable t); - public HeadRequest(Class aClass, String api, String owner, String path, int okCode, T result) { + public HeadRequest(Pithos app, Class aClass, String api, String owner, String path, int okCode, T result) { + this.app = app; this.aClass = aClass; this.api = api; this.owner = owner; @@ -82,12 +86,12 @@ public abstract class HeadRequest implements ScheduledComman this.result = result; } - public HeadRequest(Class aClass, String api, String owner, String path) { - this(aClass, api, owner, path, Response.SC_NO_CONTENT, null); + public HeadRequest(Pithos app, Class aClass, String api, String owner, String path) { + this(app, aClass, api, owner, path, Response.SC_NO_CONTENT, null); } - public HeadRequest(Class aClass, String api, String owner, String path, T result) { - this(aClass, api, owner, path, Response.SC_NO_CONTENT, result); + public HeadRequest(Pithos app, Class aClass, String api, String owner, String path, T result) { + this(app, aClass, api, owner, path, Response.SC_NO_CONTENT, result); } @Override @@ -109,7 +113,7 @@ public abstract class HeadRequest implements ScheduledComman @Override public T deserialize(Response response) { - return Resource.createFromResponse(aClass, owner, response, result); + return Resource.createFromResponse(app, aClass, owner, response, result); } @Override diff --git a/src/gr/grnet/pithos/web/client/rest/PostRequest.java b/src/gr/grnet/pithos/web/client/rest/PostRequest.java index 2bc7454..a5437a5 100644 --- a/src/gr/grnet/pithos/web/client/rest/PostRequest.java +++ b/src/gr/grnet/pithos/web/client/rest/PostRequest.java @@ -35,6 +35,7 @@ package gr.grnet.pithos.web.client.rest; +import gr.grnet.pithos.web.client.Pithos; import gr.grnet.pithos.web.client.Resource; import java.util.HashMap; @@ -49,6 +50,8 @@ import com.google.gwt.http.client.Response; public abstract class PostRequest implements ScheduledCommand { + private final Pithos app; + private String api; protected String owner; @@ -63,13 +66,15 @@ public abstract class PostRequest implements ScheduledCommand { public abstract void onError(Throwable t); - public PostRequest(String api, String owner, String path) { + public PostRequest(Pithos app, String api, String owner, String path) { + this.app = app; this.api = api; this.owner = owner; this.path = path; } - public PostRequest(String api, String owner, String path, String data) { + public PostRequest(Pithos app, String api, String owner, String path, String data) { + this.app = app; this.api = api; this.owner = owner; this.path = path; @@ -91,7 +96,7 @@ public abstract class PostRequest implements ScheduledCommand { @Override public Resource deserialize(Response response) { - return Resource.createFromResponse(Resource.class, owner, response, null); + return Resource.createFromResponse(app, Resource.class, owner, response, null); } @Override diff --git a/src/gr/grnet/pithos/web/client/rest/PutRequest.java b/src/gr/grnet/pithos/web/client/rest/PutRequest.java index 1b8d734..73ee55d 100644 --- a/src/gr/grnet/pithos/web/client/rest/PutRequest.java +++ b/src/gr/grnet/pithos/web/client/rest/PutRequest.java @@ -70,6 +70,7 @@ package gr.grnet.pithos.web.client.rest; +import gr.grnet.pithos.web.client.Pithos; import gr.grnet.pithos.web.client.Resource; import java.util.HashMap; @@ -83,6 +84,8 @@ import com.google.gwt.http.client.Response; public abstract class PutRequest implements ScheduledCommand { + private final Pithos app; + private String api; protected String owner; @@ -95,7 +98,8 @@ public abstract class PutRequest implements ScheduledCommand { public abstract void onError(Throwable t); - public PutRequest(String api, String owner, String path) { + public PutRequest(Pithos app, String api, String owner, String path) { + this.app = app; this.api = api; this.owner = owner; this.path = path; @@ -116,7 +120,7 @@ public abstract class PutRequest implements ScheduledCommand { @Override public Resource deserialize(Response response) { - return Resource.createFromResponse(Resource.class, owner, response, null); + return Resource.createFromResponse(app, Resource.class, owner, response, null); } @Override diff --git a/src/gr/grnet/pithos/web/client/tagtree/TagTreeViewModel.java b/src/gr/grnet/pithos/web/client/tagtree/TagTreeViewModel.java index ceab232..96e71e8 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.getUserID(), path) { + GetRequest getFolder = new GetRequest(app, Folder.class, app.getApiPath(), app.getUserID(), path) { @Override public void onSuccess(Folder _result) { files.addAll(_result.getFiles());