X-Git-Url: https://code.grnet.gr/git/pithos-web-client/blobdiff_plain/7811b9d1b61781af911aebe3f47f7196cbb0b059..ec9b0459df93df3d829b1d8fb8e8e1a857af2f58:/src/gr/grnet/pithos/web/client/commands/ToTrashCommand.java diff --git a/src/gr/grnet/pithos/web/client/commands/ToTrashCommand.java b/src/gr/grnet/pithos/web/client/commands/ToTrashCommand.java index c28b01b..538d48c 100644 --- a/src/gr/grnet/pithos/web/client/commands/ToTrashCommand.java +++ b/src/gr/grnet/pithos/web/client/commands/ToTrashCommand.java @@ -34,19 +34,22 @@ */ package gr.grnet.pithos.web.client.commands; -import com.google.gwt.core.client.Scheduler; 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.PostRequest; +import gr.grnet.pithos.web.client.rest.DeleteRequest; +import gr.grnet.pithos.web.client.rest.GetRequest; +import gr.grnet.pithos.web.client.rest.PutRequest; import gr.grnet.pithos.web.client.rest.RestException; import java.util.Iterator; import java.util.List; - 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; @@ -78,7 +81,7 @@ public class ToTrashCommand implements Command{ @SuppressWarnings("unchecked") @Override public void execute() { - app.updateFolder(((List) resource).get(0).getParent(), true); + app.updateFolder(((List) resource).get(0).getParent(), true, null); } }); } @@ -87,7 +90,7 @@ public class ToTrashCommand implements Command{ trashFolder(toBeTrashed, new Command() { @Override public void execute() { - app.updateFolder(toBeTrashed.getParent(), true); + app.updateFolder(toBeTrashed.getParent(), true, null); } }); @@ -95,23 +98,74 @@ public class ToTrashCommand implements Command{ } private void trashFolder(final Folder f, final Command callback) { - String path = f.getUri() + "?update="; - PostRequest trashFolder = new PostRequest(app.getApiPath(), app.getUsername(), path) { + String path = "/" + Pithos.TRASH_CONTAINER + "/" + f.getPrefix(); + PutRequest createFolder = new PutRequest(app.getApiPath(), app.getUsername(), path) { @Override public void onSuccess(@SuppressWarnings("unused") Resource result) { - Iterator iter = f.getFiles().iterator(); - trashFiles(iter, new Command() { - @Override - public void execute() { - Iterator iterf = f.getSubfolders().iterator(); - trashSubfolders(iterf, new Command() { - @Override - public void execute() { - callback.execute(); - } - }); - } - }); + 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 iter = _f.getFiles().iterator(); + trashFiles(iter, new Command() { + @Override + public void execute() { + Iterator iterf = _f.getSubfolders().iterator(); + trashSubfolders(iterf, new Command() { + + @Override + public void execute() { + DeleteRequest deleteFolder = new DeleteRequest(app.getApiPath(), _f.getOwner(), _f.getUri()) { + + @Override + public void onSuccess(@SuppressWarnings("unused") Resource _result) { + if (callback != null) + callback.execute(); + } + + @Override + public void onError(Throwable t) { + GWT.log("", t); + if (t instanceof RestException) { + if (((RestException) t).getHttpStatusCode() == Response.SC_NOT_FOUND) + onSuccess(null); + else + app.displayError("Unable to delete folder: " + ((RestException) t).getHttpStatusText()); + } + else + app.displayError("System error unable to delete folder: "+t.getMessage()); + } + + @Override + protected void onUnauthorized(Response response) { + app.sessionExpired(); + } + }; + deleteFolder.setHeader("X-Auth-Token", app.getToken()); + Scheduler.get().scheduleDeferred(deleteFolder); + } + }); + } + }); + } + + @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(); + } + }; + getFolder.setHeader("X-Auth-Token", app.getToken()); + Scheduler.get().scheduleDeferred(getFolder); } @Override @@ -123,17 +177,26 @@ public class ToTrashCommand implements Command{ else app.displayError("System error creating folder:" + t.getMessage()); } + + @Override + protected void onUnauthorized(Response response) { + app.sessionExpired(); + } }; - trashFolder.setHeader("X-Auth-Token", app.getToken()); - trashFolder.setHeader("X-Object-Meta-Trash", "true"); - Scheduler.get().scheduleDeferred(trashFolder); + createFolder.setHeader("X-Auth-Token", app.getToken()); + createFolder.setHeader("Accept", "*/*"); + createFolder.setHeader("Content-Length", "0"); + createFolder.setHeader("Content-Type", "application/folder"); + Scheduler.get().scheduleDeferred(createFolder); } + + protected void trashFiles(final Iterator iter, final Command callback) { if (iter.hasNext()) { File file = iter.next(); - String path = file.getUri() + "?update="; - PostRequest trashFile = new PostRequest(app.getApiPath(), app.getUsername(), path) { + String path = "/" + Pithos.TRASH_CONTAINER + "/" + file.getPath(); + PutRequest trashFile = new PutRequest(app.getApiPath(), app.getUsername(), path) { @Override public void onSuccess(@SuppressWarnings("unused") Resource result) { trashFiles(iter, callback); @@ -148,12 +211,17 @@ public class ToTrashCommand implements Command{ else app.displayError("System error unable to copy file: "+t.getMessage()); } + + @Override + protected void onUnauthorized(Response response) { + app.sessionExpired(); + } }; trashFile.setHeader("X-Auth-Token", app.getToken()); - trashFile.setHeader("X-Object-Meta-Trash", "true"); + trashFile.setHeader("X-Move-From", file.getUri()); Scheduler.get().scheduleDeferred(trashFile); } - else if (callback != null) { + else if (callback != null) { callback.execute(); } } @@ -161,10 +229,16 @@ public class ToTrashCommand implements Command{ protected void trashSubfolders(final Iterator iter, final Command callback) { if (iter.hasNext()) { final Folder f = iter.next(); - trashFolder(f, callback); + trashFolder(f, new Command() { + + @Override + public void execute() { + trashSubfolders(iter, callback); + } + }); } - else if (callback != null) { - callback.execute(); + else { + app.updateTrash(false, callback); } } }