From d6be39dac96deabe68e5e0accd73b0e0e341dacc Mon Sep 17 00:00:00 2001 From: Christos Stathis Date: Fri, 15 Jul 2011 17:14:58 +0300 Subject: [PATCH] Implemented folder properties general dialog --- src/gr/grnet/pithos/web/client/FileMenu.java | 4 +- .../grnet/pithos/web/client/FolderContextMenu.java | 4 +- .../pithos/web/client/FolderPropertiesDialog.java | 42 ++++++++++ src/gr/grnet/pithos/web/client/GSS.java | 78 ++++++++++++++++++ .../pithos/web/client/commands/PasteCommand.java | 83 +------------------- 5 files changed, 127 insertions(+), 84 deletions(-) diff --git a/src/gr/grnet/pithos/web/client/FileMenu.java b/src/gr/grnet/pithos/web/client/FileMenu.java index 1da3923..4b9c1dd 100644 --- a/src/gr/grnet/pithos/web/client/FileMenu.java +++ b/src/gr/grnet/pithos/web/client/FileMenu.java @@ -131,8 +131,8 @@ public class FileMenu extends MenuBar { // contextMenu.addItem(sharingItem) // .setVisible(propertiesVisible); // - if (selectedFiles.size() > 0) { - MenuItem propertiesItem = new MenuItem("" + AbstractImagePrototype.create(images.viewText()).getHTML() + " Properties", true, new PropertiesCommand(GSS.get(), null, selectedFiles, images, 0)); + if (selectedFiles.size() > 0 || selectedFolder != null) { + MenuItem propertiesItem = new MenuItem("" + AbstractImagePrototype.create(images.viewText()).getHTML() + " Properties", true, new PropertiesCommand(GSS.get(), null, selectedFiles.size() > 0 ? selectedFiles : selectedFolder, images, 0)); addItem(propertiesItem); } } diff --git a/src/gr/grnet/pithos/web/client/FolderContextMenu.java b/src/gr/grnet/pithos/web/client/FolderContextMenu.java index 4d39001..5de0b04 100644 --- a/src/gr/grnet/pithos/web/client/FolderContextMenu.java +++ b/src/gr/grnet/pithos/web/client/FolderContextMenu.java @@ -125,8 +125,8 @@ public class FolderContextMenu extends PopupPanel { // MenuItem sharing = new MenuItem("" + AbstractImagePrototype.create(newImages.sharing()).getHTML() + " Sharing", true, new PropertiesCommand(this, newImages, 1)); // contextMenu.addItem(sharing); -// MenuItem properties = new MenuItem("" + AbstractImagePrototype.create(newImages.viewText()).getHTML() + " Properties", true, new PropertiesCommand(this, newImages, 0)); -// contextMenu.addItem(properties); + MenuItem properties = new MenuItem("" + AbstractImagePrototype.create(newImages.viewText()).getHTML() + " Properties", true, new PropertiesCommand(GSS.get(), this, folder, newImages, 0)); + contextMenu.addItem(properties); add(contextMenu); } diff --git a/src/gr/grnet/pithos/web/client/FolderPropertiesDialog.java b/src/gr/grnet/pithos/web/client/FolderPropertiesDialog.java index 0f026c9..415f76b 100644 --- a/src/gr/grnet/pithos/web/client/FolderPropertiesDialog.java +++ b/src/gr/grnet/pithos/web/client/FolderPropertiesDialog.java @@ -36,7 +36,9 @@ package gr.grnet.pithos.web.client; import com.google.gwt.core.client.Scheduler; import com.google.gwt.event.dom.client.KeyDownEvent; +import com.google.gwt.user.client.Command; import com.google.gwt.user.client.Event; +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.PostCommand; @@ -64,6 +66,7 @@ import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.TabPanel; import com.google.gwt.user.client.ui.TextBox; import com.google.gwt.user.client.ui.VerticalPanel; +import java.util.Iterator; /** * The 'Folder properties' dialog box implementation. @@ -132,6 +135,7 @@ public class FolderPropertiesDialog extends DialogBox { generalTable.setText(2, 0, "Creator"); generalTable.setText(3, 0, "Last modified"); folderName.setText(create ? "" : folder.getName()); + folderName.setReadOnly(folder.isContainer()); generalTable.setWidget(0, 1, folderName); if (create) @@ -354,6 +358,44 @@ public class FolderPropertiesDialog extends DialogBox { // } // }; // DeferredCommand.addCommand(ep); + final String newName = folderName.getText(); + if (!folder.isContainer() && !folder.getName().equals(newName)) { + final String path = app.getApiPath() + app.getUsername() + folder.getParent().getUri() + "/" + newName; + PutRequest newFolder = new PutRequest(path) { + @Override + public void onSuccess(Resource result) { + Iterator iter = folder.getFiles().iterator(); + app.copyFiles(iter, folder.getParent().getUri() + "/" + newName, new Command() { + @Override + public void execute() { + Iterator iterf = folder.getSubfolders().iterator(); + app.copySubfolders(iterf, folder.getParent().getUri() + "/" + newName, new Command() { + @Override + public void execute() { + app.deleteFolder(folder); + app.updateFolder(folder.getParent()); + } + }); + } + }); + } + + @Override + public void onError(Throwable t) { + GWT.log("", t); + if(t instanceof RestException){ + app.displayError("Unable to update folder: " + ((RestException) t).getHttpStatusText()); + } + else + app.displayError("System error modifying folder: " + t.getMessage()); + } + }; + newFolder.setHeader("X-Auth-Token", app.getToken()); + newFolder.setHeader("Content-Type", "application/folder"); + newFolder.setHeader("Accept", "*/*"); + newFolder.setHeader("Content-Length", "0"); + Scheduler.get().scheduleDeferred(newFolder); + } } public void selectTab(int _tab) { diff --git a/src/gr/grnet/pithos/web/client/GSS.java b/src/gr/grnet/pithos/web/client/GSS.java index 109b8c8..07ea2b6 100644 --- a/src/gr/grnet/pithos/web/client/GSS.java +++ b/src/gr/grnet/pithos/web/client/GSS.java @@ -46,6 +46,7 @@ import com.google.gwt.json.client.JSONObject; import com.google.gwt.json.client.JSONParser; import com.google.gwt.json.client.JSONString; import com.google.gwt.json.client.JSONValue; +import com.google.gwt.user.client.Command; import com.google.gwt.view.client.SelectionChangeEvent; import com.google.gwt.view.client.SingleSelectionModel; import gr.grnet.pithos.web.client.commands.GetUserCommand; @@ -57,6 +58,7 @@ import gr.grnet.pithos.web.client.foldertree.FolderTreeViewModel; 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.PutRequest; import gr.grnet.pithos.web.client.rest.RestException; import gr.grnet.pithos.web.client.rest.resource.FileResource; import gr.grnet.pithos.web.client.rest.resource.OtherUserResource; @@ -918,4 +920,80 @@ public class GSS implements EntryPoint, ResizeHandler { public FolderTreeView getFolderTreeView() { return folderTreeView; } + + public void copyFiles(final Iterator iter, final String targetUri, final Command callback) { + if (iter.hasNext()) { + File file = iter.next(); + String path = getApiPath() + 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()); + } + }; + copyFile.setHeader("X-Auth-Token", getToken()); + copyFile.setHeader("X-Copy-From", file.getUri()); + Scheduler.get().scheduleDeferred(copyFile); + } + else if (callback != null) { + callback.execute(); + } + } + + public 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) { + callback.execute(); + } + } + + public void copyFolder(final Folder f, final String targetUri, final Command callback) { + String path = getApiPath() + 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) { + displayError("Unable to create folder:" + ((RestException) t).getHttpStatusText()); + } + else + displayError("System error creating folder:" + t.getMessage()); + } + }; + createFolder.setHeader("X-Auth-Token", getToken()); + createFolder.setHeader("Accept", "*/*"); + createFolder.setHeader("Content-Length", "0"); + createFolder.setHeader("Content-Type", "application/folder"); + Scheduler.get().scheduleDeferred(createFolder); + } } diff --git a/src/gr/grnet/pithos/web/client/commands/PasteCommand.java b/src/gr/grnet/pithos/web/client/commands/PasteCommand.java index 465c712..2c2803c 100644 --- a/src/gr/grnet/pithos/web/client/commands/PasteCommand.java +++ b/src/gr/grnet/pithos/web/client/commands/PasteCommand.java @@ -74,7 +74,7 @@ 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.getUri(), new Command() { @Override public void execute() { app.getClipboard().clear(); @@ -83,7 +83,7 @@ public class PasteCommand implements Command { }); } else { - copyFolder(tobeCopied, folder.getUri(), new Command() { + app.copyFolder(tobeCopied, folder.getUri(), new Command() { @Override public void execute() { app.getClipboard().clear(); @@ -91,14 +91,13 @@ public class PasteCommand implements Command { app.updateFolder(folder); } }); - } } else { List tobeCopied = (List) clipboardItem; Iterator iter = tobeCopied.iterator(); if (operation == Clipboard.COPY) { - copyFiles(iter, folder.getUri(), new Command() { + app.copyFiles(iter, folder.getUri(), new Command() { @Override public void execute() { app.getClipboard().clear(); @@ -146,80 +145,4 @@ public class PasteCommand implements Command { 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()); - } - }; - copyFile.setHeader("X-Auth-Token", app.getToken()); - copyFile.setHeader("X-Copy-From", file.getUri()); - 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) { - callback.execute(); - } - } } -- 1.7.10.4