X-Git-Url: https://code.grnet.gr/git/pithos-web-client/blobdiff_plain/031f1fe05c1a37b94bc0eabd1ef04bbc80cb7140..3f8622d49342153e11fb29d2c57b6f86ffff2ea0:/src/gr/grnet/pithos/web/client/commands/PasteCommand.java diff --git a/src/gr/grnet/pithos/web/client/commands/PasteCommand.java b/src/gr/grnet/pithos/web/client/commands/PasteCommand.java index 465c712..639050b 100644 --- a/src/gr/grnet/pithos/web/client/commands/PasteCommand.java +++ b/src/gr/grnet/pithos/web/client/commands/PasteCommand.java @@ -36,7 +36,7 @@ package gr.grnet.pithos.web.client.commands; import com.google.gwt.core.client.Scheduler; import gr.grnet.pithos.web.client.Clipboard; -import gr.grnet.pithos.web.client.GSS; +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; @@ -47,16 +47,18 @@ import java.util.Iterator; import java.util.List; import com.google.gwt.core.client.GWT; +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; public class PasteCommand implements Command { - private GSS app; + protected Pithos app; private PopupPanel containerPanel; - private Folder folder; + protected Folder folder; - public PasteCommand(GSS _app, PopupPanel _containerPanel, Folder _folder) { + public PasteCommand(Pithos _app, PopupPanel _containerPanel, Folder _folder) { app = _app; containerPanel = _containerPanel; folder = _folder; @@ -74,35 +76,47 @@ public class PasteCommand implements Command { if (clipboardItem instanceof Folder) { final Folder tobeCopied = (Folder) clipboardItem; if (operation == Clipboard.COPY) { - copyFolder(tobeCopied, folder.getUri(), new Command() { + app.copyFolder(tobeCopied, folder.getOwner(), folder.getUri(), new Command() { @Override public void execute() { app.getClipboard().clear(); - app.updateFolder(folder); + app.updateFolder(folder, true, new Command() { + + @Override + public void execute() { + app.updateStatistics(); + } + }); } }); } else { - copyFolder(tobeCopied, folder.getUri(), new Command() { + app.copyFolder(tobeCopied, folder.getOwner(), folder.getUri(), new Command() { @Override public void execute() { app.getClipboard().clear(); app.deleteFolder(tobeCopied); - app.updateFolder(folder); + app.updateFolder(folder, true, null); } }); - } } else { - List tobeCopied = (List) clipboardItem; + @SuppressWarnings("unchecked") + List tobeCopied = (List) clipboardItem; Iterator iter = tobeCopied.iterator(); if (operation == Clipboard.COPY) { - copyFiles(iter, folder.getUri(), new Command() { + app.copyFiles(iter, folder.getOwner(), folder.getUri(), new Command() { @Override public void execute() { app.getClipboard().clear(); - app.updateFolder(folder); + app.updateFolder(folder, true, new Command() { + + @Override + public void execute() { + app.updateStatistics(); + } + }); } }); } @@ -111,114 +125,45 @@ public class PasteCommand implements Command { @Override public void execute() { app.getClipboard().clear(); - app.updateFolder(folder); + app.updateFolder(folder, true, null); } }); } } } - private void moveFiles(final Iterator iter, final Command callback) { + protected void moveFiles(final Iterator iter, final Command callback) { if (iter.hasNext()) { File file = iter.next(); - String path = app.getApiPath() + app.getUsername() + folder.getUri() + "/" + file.getName(); - PutRequest copyFile = new PutRequest(path) { + String path = folder.getUri() + "/" + file.getName(); + PutRequest copyFile = new PutRequest(app.getApiPath(), folder.getOwner(), path) { @Override - public void onSuccess(Resource result) { + public void onSuccess(@SuppressWarnings("unused") Resource result) { moveFiles(iter, callback); } @Override public void onError(Throwable t) { GWT.log("", t); + app.setError(t); if (t instanceof RestException) { - GSS.get().displayError("Unable to copy file: " + ((RestException) t).getHttpStatusText()); + app.displayError("Unable to copy file: " + ((RestException) t).getHttpStatusText()); } else - GSS.get().displayError("System error unable to copy file: "+t.getMessage()); + app.displayError("System error unable to copy file: "+t.getMessage()); } - }; - copyFile.setHeader("X-Auth-Token", app.getToken()); - copyFile.setHeader("X-Move-From", file.getUri()); - Scheduler.get().scheduleDeferred(copyFile); - } - else if (callback != null) { - callback.execute(); - } - } - private void copyFiles(final Iterator iter, final String targetUri, final Command callback) { - if (iter.hasNext()) { - File file = iter.next(); - String path = app.getApiPath() + app.getUsername() + targetUri + "/" + file.getName(); - PutRequest copyFile = new PutRequest(path) { - @Override - public void onSuccess(Resource result) { - copyFiles(iter, targetUri, callback); - } - - @Override - public void onError(Throwable t) { - GWT.log("", t); - if (t instanceof RestException) { - GSS.get().displayError("Unable to copy file: " + ((RestException) t).getHttpStatusText()); - } - else - GSS.get().displayError("System error unable to copy file: "+t.getMessage()); - } + @Override + protected void onUnauthorized(Response response) { + app.sessionExpired(); + } }; copyFile.setHeader("X-Auth-Token", app.getToken()); - copyFile.setHeader("X-Copy-From", file.getUri()); + copyFile.setHeader("X-Move-From", URL.encodePathSegment(file.getUri())); + copyFile.setHeader("Content-Type", file.getContentType()); Scheduler.get().scheduleDeferred(copyFile); } - else if (callback != null) { - callback.execute(); - } - } - - private void copyFolder(final Folder f, final String targetUri, final Command callback) { - String path = app.getApiPath() + app.getUsername() + targetUri + "/" + f.getName(); - PutRequest createFolder = new PutRequest(path) { - @Override - public void onSuccess(Resource result) { - Iterator iter = f.getFiles().iterator(); - copyFiles(iter, targetUri + "/" + f.getName(), new Command() { - @Override - public void execute() { - Iterator iterf = f.getSubfolders().iterator(); - copySubfolders(iterf, targetUri + "/" + f.getName(), new Command() { - @Override - public void execute() { - callback.execute(); - } - }); - } - }); - } - - @Override - public void onError(Throwable t) { - GWT.log("", t); - if (t instanceof RestException) { - app.displayError("Unable to create folder:" + ((RestException) t).getHttpStatusText()); - } - else - app.displayError("System error creating folder:" + t.getMessage()); - } - }; - 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); - } - - private void copySubfolders(final Iterator iter, final String targetUri, final Command callback) { - if (iter.hasNext()) { - final Folder f = iter.next(); - copyFolder(f, targetUri, callback); - } - else if (callback != null) { + else if (callback != null) { callback.execute(); } }