X-Git-Url: https://code.grnet.gr/git/pithos/blobdiff_plain/55081c0ab1c7edbe1f62dd1164626379ccee1d3b..dc275351d7946c097450634fd43e1057cdb9d5f1:/web_client/src/gr/grnet/pithos/web/client/FileContextMenu.java diff --git a/web_client/src/gr/grnet/pithos/web/client/FileContextMenu.java b/web_client/src/gr/grnet/pithos/web/client/FileContextMenu.java index af74c56..2ad422d 100644 --- a/web_client/src/gr/grnet/pithos/web/client/FileContextMenu.java +++ b/web_client/src/gr/grnet/pithos/web/client/FileContextMenu.java @@ -39,27 +39,18 @@ import gr.grnet.pithos.web.client.commands.CutCommand; import gr.grnet.pithos.web.client.commands.DeleteCommand; import gr.grnet.pithos.web.client.commands.PasteCommand; import gr.grnet.pithos.web.client.commands.PropertiesCommand; -import gr.grnet.pithos.web.client.commands.RefreshCommand; import gr.grnet.pithos.web.client.commands.RestoreTrashCommand; import gr.grnet.pithos.web.client.commands.ToTrashCommand; import gr.grnet.pithos.web.client.commands.UploadFileCommand; import gr.grnet.pithos.web.client.foldertree.File; import gr.grnet.pithos.web.client.foldertree.Folder; -import gr.grnet.pithos.web.client.rest.resource.FileResource; -import gr.grnet.pithos.web.client.rest.resource.FolderResource; -import gr.grnet.pithos.web.client.rest.resource.RestResource; -import gr.grnet.pithos.web.client.rest.resource.RestResourceWrapper; -import gr.grnet.pithos.web.client.rest.resource.TrashFolderResource; import java.util.List; -import com.google.gwt.event.dom.client.ClickEvent; -import com.google.gwt.event.dom.client.ClickHandler; -import com.google.gwt.event.dom.client.ContextMenuEvent; import com.google.gwt.resources.client.ClientBundle; import com.google.gwt.resources.client.ImageResource; import com.google.gwt.user.client.Command; -import com.google.gwt.user.client.Event; +import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.AbstractImagePrototype; import com.google.gwt.user.client.ui.MenuBar; import com.google.gwt.user.client.ui.MenuItem; @@ -99,7 +90,7 @@ public class FileContextMenu extends PopupPanel { * The image bundle for this widget's images that reuses images defined in * other menus. */ - public interface Images extends ClientBundle,FileMenu.Images, EditMenu.Images { + public interface Images extends ClientBundle { @Source("gr/grnet/pithos/resources/mimetypes/document.png") ImageResource fileContextMenu(); @@ -107,17 +98,78 @@ public class FileContextMenu extends PopupPanel { @Source("gr/grnet/pithos/resources/doc_versions.png") ImageResource versions(); - @Override - @Source("gr/grnet/pithos/resources/group.png") + @Source("gr/grnet/pithos/resources/groups22.png") ImageResource sharing(); - @Override @Source("gr/grnet/pithos/resources/border_remove.png") ImageResource unselectAll(); @Source("gr/grnet/pithos/resources/demo.png") ImageResource viewImage(); -} + + @Source("gr/grnet/pithos/resources/folder_new.png") + ImageResource folderNew(); + + @Source("gr/grnet/pithos/resources/folder_outbox.png") + ImageResource fileUpdate(); + + @Source("gr/grnet/pithos/resources/view_text.png") + ImageResource viewText(); + + @Source("gr/grnet/pithos/resources/folder_inbox.png") + ImageResource download(); + + @Source("gr/grnet/pithos/resources/trash.png") + ImageResource emptyTrash(); + + @Source("gr/grnet/pithos/resources/refresh.png") + ImageResource refresh(); + + /** + * Will bundle the file 'editcut.png' residing in the package + * 'gr.grnet.pithos.web.resources'. + * + * @return the image prototype + */ + @Source("gr/grnet/pithos/resources/editcut.png") + ImageResource cut(); + + /** + * Will bundle the file 'editcopy.png' residing in the package + * 'gr.grnet.pithos.web.resources'. + * + * @return the image prototype + */ + @Source("gr/grnet/pithos/resources/editcopy.png") + ImageResource copy(); + + /** + * Will bundle the file 'editpaste.png' residing in the package + * 'gr.grnet.pithos.web.resources'. + * + * @return the image prototype + */ + @Source("gr/grnet/pithos/resources/editpaste.png") + ImageResource paste(); + + /** + * Will bundle the file 'editdelete.png' residing in the package + * 'gr.grnet.pithos.web.resources'. + * + * @return the image prototype + */ + @Source("gr/grnet/pithos/resources/editdelete.png") + ImageResource delete(); + + /** + * Will bundle the file 'translate.png' residing in the package + * 'gr.grnet.pithos.web.resources'. + * + * @return the image prototype + */ + @Source("gr/grnet/pithos/resources/translate.png") + ImageResource selectAll(); + } public static native String getDate()/*-{ return (new Date()).toUTCString(); @@ -128,71 +180,76 @@ public class FileContextMenu extends PopupPanel { * * @param newImages the image bundle passed on by the parent object */ - public FileContextMenu(Images newImages, Folder selectedFolder, List selectedFiles, boolean isTrash) { + public FileContextMenu(final Pithos app, Images newImages, TreeView selectedTree, Folder selectedFolder, final List selectedFiles) { // The popup's constructor's argument is a boolean specifying that it // auto-close itself when the user clicks outside of it. super(true); - GSS gss = GSS.get(); setAnimationEnabled(true); images = newImages; MenuBar contextMenu = new MenuBar(true); - - if (GSS.get().getClipboard().hasFiles()) { - pasteItem = new MenuItem("" + AbstractImagePrototype.create(images.paste()).getHTML() + " Paste", true, new PasteCommand(GSS.get(), this, selectedFolder)); - contextMenu.addItem(pasteItem); + Boolean[] permissions = null; + boolean canWrite = true; + if (selectedFolder != null) { + permissions = selectedFolder.getPermissions().get(app.getUsername()); + canWrite = selectedFolder.getOwner().equals(app.getUsername()) || (permissions!= null && permissions[1] != null && permissions[1]); + } + else { + for (File f : selectedFiles) { + permissions = f.getPermissions().get(app.getUsername()); + canWrite &= (f.getOwner().equals(app.getUsername()) || (permissions!= null && permissions[1] != null && permissions[1])); + } } + boolean isFolderTreeSelected = selectedTree.equals(app.getFolderTreeView()); + if (selectedFolder != null) { + if (!selectedFolder.isInTrash()) { + if (canWrite && app.getClipboard().hasFiles()) { + List files = (List) app.getClipboard().getItem(); + pasteItem = new MenuItem("" + AbstractImagePrototype.create(images.paste()).getHTML() + " Paste", true, new PasteCommand(app, this, selectedFolder)); + contextMenu.addItem(pasteItem); + } + + if (canWrite) { + MenuItem upload = new MenuItem("" + AbstractImagePrototype.create(images.fileUpdate()).getHTML() + " Upload", true, new UploadFileCommand(app, this, selectedFolder)); + contextMenu.addItem(upload); + } + if (isFolderTreeSelected) { + cutItem = new MenuItem("" + AbstractImagePrototype.create(newImages.cut()).getHTML() + " Cut", true, new CutCommand(app, this, selectedFiles)); + contextMenu.addItem(cutItem); + } + + + if (isFolderTreeSelected) { + trashItem = new MenuItem("" + AbstractImagePrototype.create(newImages.emptyTrash()).getHTML() + " Move to Trash", true, new ToTrashCommand(app, this, selectedFiles)); + contextMenu.addItem(trashItem); + } + } + else { + MenuItem restore = new MenuItem("" + AbstractImagePrototype.create(images.versions()).getHTML() + " Restore", true, new RestoreTrashCommand(app, this, selectedFiles)); + contextMenu.addItem(restore); + } + } + copyItem = new MenuItem("" + AbstractImagePrototype.create(newImages.copy()).getHTML() + " Copy", true, new CopyCommand(app, this, selectedFiles)); + contextMenu.addItem(copyItem); - MenuItem upload = new MenuItem("" + AbstractImagePrototype.create(images.fileUpdate()).getHTML() + " Upload", true, new UploadFileCommand(this, selectedFolder)); - contextMenu.addItem(upload); - -// MenuItem refresh = new MenuItem("" + AbstractImagePrototype.create(images.refresh()).getHTML() + " Refresh", true, new RefreshCommand(this, images)); -// contextMenu.addItem(refresh); - -// if (isTrash) { -// MenuItem restore = new MenuItem("" + AbstractImagePrototype.create(images.versions()).getHTML() + " Restore", true, new RestoreTrashCommand(this)); -// contextMenu.addItem(restore); -// -// MenuItem delete = new MenuItem("" + AbstractImagePrototype.create(images.delete()).getHTML() + " Delete", true, new DeleteCommand(this, null, images)); -// contextMenu.addItem(delete); -// } else { - cutItem = new MenuItem("" + AbstractImagePrototype.create(newImages.cut()).getHTML() + " Cut", true, new CutCommand(GSS.get(), this, selectedFiles)); - contextMenu.addItem(cutItem); - - copyItem = new MenuItem("" + AbstractImagePrototype.create(newImages.copy()).getHTML() + " Copy", true, new CopyCommand(GSS.get(), this, selectedFiles)); - contextMenu.addItem(copyItem); - - trashItem = new MenuItem("" + AbstractImagePrototype.create(newImages.emptyTrash()).getHTML() + " Move to Trash", true, new ToTrashCommand(GSS.get(), this, selectedFiles)); - contextMenu.addItem(trashItem); - - deleteItem = new MenuItem("" + AbstractImagePrototype.create(newImages.delete()).getHTML() + " Delete", true, new DeleteCommand(this, selectedFiles, images)); - contextMenu.addItem(deleteItem); - -// sharingItem = new MenuItem("" + AbstractImagePrototype.create(newImages.sharing()).getHTML() + " Sharing", true, new PropertiesCommand(this, images, 1)); -// contextMenu.addItem(sharingItem); + if (isFolderTreeSelected) { + deleteItem = new MenuItem("" + AbstractImagePrototype.create(newImages.delete()).getHTML() + " Delete", true, new DeleteCommand(app, this, selectedFiles, MessagePanel.images)); + contextMenu.addItem(deleteItem); + } -// propItem = new MenuItem("" + AbstractImagePrototype.create(newImages.viewText()).getHTML() + " Properties", true, new PropertiesCommand(this, images, 0)); -// contextMenu.addItem(propItem); + if (selectedFolder != null && !selectedFolder.isInTrash()) { + if (isFolderTreeSelected && selectedFiles.size() == 1) + contextMenu.addItem(new MenuItem("" + AbstractImagePrototype.create(newImages.viewText()).getHTML() + " Properties", true, new PropertiesCommand(app, this, selectedFiles, images, 0))); - downloadItem = new MenuItem("" + AbstractImagePrototype.create(newImages.download()).getHTML() + " Download", true, new Command() { - @Override - public void execute() { - } - }); - contextMenu.addItem(downloadItem); + } + contextMenu.addItem(new MenuItem("" + AbstractImagePrototype.create(newImages.download()).getHTML() + " Download", true, new Command() { -// final Command unselectAllCommand = new Command() { -// -// @Override -// public void execute() { -// hide(); -// if(GSS.get().isFileListShowing()) -// GSS.get().getFileList().clearSelectedRows(); -// } -// }; -// MenuItem unSelect = new MenuItem("" + AbstractImagePrototype.create(images.unselectAll()).getHTML() + " Unselect", true, unselectAllCommand); -// contextMenu.addItem(unSelect); - -// } + @Override + public void execute() { + for (File f : selectedFiles) + Window.open(app.getApiPath() + f.getOwner() + f.getUri() + "?X-Auth-Token=" + app.getToken(), "_blank", ""); + } + })); + add(contextMenu); } }