X-Git-Url: https://code.grnet.gr/git/pithos-web-client/blobdiff_plain/a7c43f262c15243c75e22909503f50eca36ec128..1201686bb4bd5ac0ff4b7bd38064ac0976ed3c9c:/src/gr/grnet/pithos/web/client/commands/EmptyTrashCommand.java diff --git a/src/gr/grnet/pithos/web/client/commands/EmptyTrashCommand.java b/src/gr/grnet/pithos/web/client/commands/EmptyTrashCommand.java index 27a60e8..b519a0f 100644 --- a/src/gr/grnet/pithos/web/client/commands/EmptyTrashCommand.java +++ b/src/gr/grnet/pithos/web/client/commands/EmptyTrashCommand.java @@ -34,13 +34,21 @@ */ package gr.grnet.pithos.web.client.commands; +import java.util.Iterator; + import gr.grnet.pithos.web.client.Pithos; -import gr.grnet.pithos.web.client.rest.DeleteCommand; +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 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.DeferredCommand; import com.google.gwt.user.client.ui.PopupPanel; @@ -50,7 +58,7 @@ import com.google.gwt.user.client.ui.PopupPanel; public class EmptyTrashCommand implements Command{ private PopupPanel containerPanel; - private Pithos app; + Pithos app; public EmptyTrashCommand(Pithos _app, PopupPanel _containerPanel){ app = _app; @@ -59,32 +67,139 @@ public class EmptyTrashCommand implements Command{ @Override public void execute() { - containerPanel.hide(); - DeleteCommand df = new DeleteCommand(app, app.getTreeView().getTrash().getUri()){ + if (containerPanel != null) + containerPanel.hide(); + + final Folder trash = app.getAccount().getTrash(); + if (trash != null) { + Iterator iter = trash.getFiles().iterator(); + deleteFile(iter, new Command() { + + @Override + public void execute() { + Iterator iter2 = trash.getSubfolders().iterator(); + deleteSubfolder(iter2, new Command() { + + @Override + public void execute() { + app.updateTrash(true, new Command() { + + @Override + public void execute() { + app.updateStatistics(); + } + }); + } + }); + } + }); + } + } - @Override - public void onComplete() { - app.getTreeView().updateTrashNode(); - app.showFileList(true); - } + protected void deleteSubfolder(final Iterator iter2, final Command callback) { + if (iter2.hasNext()) { + final Folder f = iter2.next(); + GetRequest getFolder = new GetRequest(Folder.class, app.getApiPath(), f.getOwner(), "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + URL.encodeQueryString(f.getPrefix()), f) { + + @Override + public void onSuccess(final Folder _f) { + Iterator iter3 = _f.getFiles().iterator(); + deleteFile(iter3, new Command() { + + @Override + public void execute() { + Iterator iter4 = _f.getSubfolders().iterator(); + deleteSubfolder(iter4, new Command() { + + @Override + public void execute() { + String path = _f.getUri(); + DeleteRequest deleteF = new DeleteRequest(app.getApiPath(), _f.getOwner(), path) { + + @Override + public void onSuccess(@SuppressWarnings("unused") Resource result) { + deleteSubfolder(iter2, callback); + } + + @Override + public void onError(Throwable t) { + GWT.log("", t); + if (t instanceof RestException) { + app.displayError("Unable to delete file:" + ((RestException) t).getHttpStatusText()); + } + else + app.displayError("System error deleting file:" + t.getMessage()); + } + + @Override + protected void onUnauthorized(Response response) { + app.sessionExpired(); + } + }; + deleteF.setHeader("X-Auth-Token", app.getToken()); + Scheduler.get().scheduleDeferred(deleteF); + } + }); + } + }); + } - @Override - public void onError(Throwable t) { - GWT.log("", t); - if(t instanceof RestException){ - int statusCode = ((RestException)t).getHttpStatusCode(); - if(statusCode == 405) - app.displayError("You don't have the necessary permissions"); - else if(statusCode == 404) - app.displayError("Resource does not exist"); - else - app.displayError("Unable to empty trash:"+((RestException)t).getHttpStatusText()); + @Override + public void onError(Throwable t) { + GWT.log("", t); + if (t instanceof RestException) { + app.displayError("Unable to get folder: " + ((RestException) t).getHttpStatusText()); + } + else + app.displayError("System error getting folder: " + t.getMessage()); + } + + @Override + protected void onUnauthorized(Response response) { + app.sessionExpired(); } - else - app.displayError("System error emptying trash:"+t.getMessage()); - } - }; - DeferredCommand.addCommand(df); + }; + getFolder.setHeader("X-Auth-Token", app.getToken()); + Scheduler.get().scheduleDeferred(getFolder); + } + else { + if (callback != null) + callback.execute(); + } } + void deleteFile(final Iterator iter, final Command callback) { + if (iter.hasNext()) { + File f = iter.next(); + String path = f.getUri(); + DeleteRequest deleteF = new DeleteRequest(app.getApiPath(), f.getOwner(), path) { + + @Override + public void onSuccess(@SuppressWarnings("unused") Resource result) { + deleteFile(iter, callback); + } + + @Override + public void onError(Throwable t) { + GWT.log("", t); + if (t instanceof RestException) { + app.displayError("Unable to delete file:" + ((RestException) t).getHttpStatusText()); + } + else + app.displayError("System error deleting file:" + t.getMessage()); + } + + @Override + protected void onUnauthorized(Response response) { + app.sessionExpired(); + } + }; + deleteF.setHeader("X-Auth-Token", app.getToken()); + Scheduler.get().scheduleDeferred(deleteF); + } + else { + if (callback != null) + callback.execute(); + } + } }