X-Git-Url: https://code.grnet.gr/git/pithos-web-client/blobdiff_plain/447407c81f2cdb6e229454b4b0fa258fafdc130a..2f274388b9d7939504028ae90abea6d8b3caa577:/src/gr/grnet/pithos/web/client/FolderContextMenu.java diff --git a/src/gr/grnet/pithos/web/client/FolderContextMenu.java b/src/gr/grnet/pithos/web/client/FolderContextMenu.java index 4a77f38..a717dec 100644 --- a/src/gr/grnet/pithos/web/client/FolderContextMenu.java +++ b/src/gr/grnet/pithos/web/client/FolderContextMenu.java @@ -44,20 +44,11 @@ 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.foldertree.FolderTreeView; -import gr.grnet.pithos.web.client.rest.resource.MyFolderResource; -import gr.grnet.pithos.web.client.rest.resource.OtherUserResource; -import gr.grnet.pithos.web.client.rest.resource.OthersFolderResource; -import gr.grnet.pithos.web.client.rest.resource.OthersResource; -import gr.grnet.pithos.web.client.rest.resource.RestResource; -import gr.grnet.pithos.web.client.rest.resource.SharedFolderResource; -import gr.grnet.pithos.web.client.rest.resource.SharedResource; -import gr.grnet.pithos.web.client.rest.resource.TrashFolderResource; -import gr.grnet.pithos.web.client.rest.resource.TrashResource; -import com.google.gwt.resources.client.ClientBundle; +import java.util.List; + import com.google.gwt.user.client.ui.AbstractImagePrototype; import com.google.gwt.user.client.ui.MenuBar; import com.google.gwt.user.client.ui.MenuItem; @@ -77,7 +68,7 @@ public class FolderContextMenu 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 FileContextMenu.Images { } private MenuItem pasteItem; @@ -87,7 +78,7 @@ public class FolderContextMenu extends PopupPanel { * * @param newImages the image bundle passed on by the parent object */ - public FolderContextMenu(final Images newImages, Folder folder) { + public FolderContextMenu(Pithos app, final Images newImages, TreeView selectedTree, Folder folder) { // The popup's constructor's argument is a boolean specifying that it // auto-close itself when the user clicks outside of it. super(true); @@ -95,35 +86,75 @@ public class FolderContextMenu extends PopupPanel { images = newImages; MenuBar contextMenu = new MenuBar(true); - MenuItem newFolder = new MenuItem("" + AbstractImagePrototype.create(newImages.folderNew()).getHTML() + " New Folder", true, new NewFolderCommand(this, folder, images)); - contextMenu.addItem(newFolder); - - // do not show the copy & cut option for the user's root folder - MenuItem cut = new MenuItem("" + AbstractImagePrototype.create(newImages.cut()).getHTML() + " Cut", true, new CutCommand(this)); - contextMenu.addItem(cut); - - MenuItem copy = new MenuItem("" + AbstractImagePrototype.create(newImages.copy()).getHTML() + " Copy", true, new CopyCommand(this)); - contextMenu.addItem(copy); - - pasteItem = new MenuItem("" + AbstractImagePrototype.create(newImages.paste()).getHTML() + " Paste", true, new PasteCommand(this)); - contextMenu.addItem(pasteItem); - - // do not show delete options for the user's root folder - MenuItem moveToTrash = new MenuItem("" + AbstractImagePrototype.create(newImages.emptyTrash()).getHTML() + " Move to Trash", true, new ToTrashCommand(this)); - contextMenu.addItem(moveToTrash); - - MenuItem delete = new MenuItem("" + AbstractImagePrototype.create(newImages.delete()).getHTML() + " Delete", true, new DeleteCommand(this, newImages)); - contextMenu.addItem(delete); - - MenuItem refresh = new MenuItem("" + AbstractImagePrototype.create(images.refresh()).getHTML() + " Refresh", true, new RefreshCommand(this, images)); - contextMenu.addItem(refresh); - - 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); - + Boolean[] permissions = folder.getPermissions().get(app.getUsername()); + boolean canWrite = folder.getOwner().equals(app.getUsername()) || (permissions!= null && permissions[1] != null && permissions[1]); + boolean isFolderTreeSelected = selectedTree.equals(app.getFolderTreeView()); + boolean otherSharedTreeSelected = selectedTree.equals(app.getOtherSharedTreeView()); + + if (isFolderTreeSelected || otherSharedTreeSelected) { + MenuItem refresh = new MenuItem("" + AbstractImagePrototype.create(images.refresh()).getHTML() + " Refresh", true, new RefreshCommand(app, this, folder)); + contextMenu.addItem(refresh); + } + + if (!folder.isInTrash()) { + if (canWrite) { + MenuItem newFolder = new MenuItem("" + AbstractImagePrototype.create(newImages.folderNew()).getHTML() + " New Folder", true, new NewFolderCommand(app, this, folder, images)); + contextMenu.addItem(newFolder); + + if (isFolderTreeSelected && !folder.isContainer()) { + MenuItem cut = new MenuItem("" + AbstractImagePrototype.create(newImages.cut()).getHTML() + " Cut", true, new CutCommand(app, this, folder)); + contextMenu.addItem(cut); + } + } + + MenuItem copy = new MenuItem("" + AbstractImagePrototype.create(newImages.copy()).getHTML() + " Copy", true, new CopyCommand(app, this, folder)); + contextMenu.addItem(copy); + + if (canWrite) { + if (!app.getClipboard().isEmpty()) { + Object item = app.getClipboard().getItem(); + boolean showPaste = false; + if (item instanceof List) { + List files = (List) item; + if (files.get(0).getOwner().equals(folder.getOwner())) + showPaste = true; + } + else { + Folder f = (Folder) item; + if (f.getOwner().equals(folder.getOwner())) + showPaste = true; + } + if (showPaste) { + pasteItem = new MenuItem("" + AbstractImagePrototype.create(newImages.paste()).getHTML() + " Paste", true, new PasteCommand(app, this, folder)); + contextMenu.addItem(pasteItem); + } + } + + if (isFolderTreeSelected && !folder.isContainer()) { + MenuItem moveToTrash = new MenuItem("" + AbstractImagePrototype.create(newImages.emptyTrash()).getHTML() + " Move to Trash", true, new ToTrashCommand(app, this, folder)); + contextMenu.addItem(moveToTrash); + + MenuItem delete = new MenuItem("" + AbstractImagePrototype.create(newImages.delete()).getHTML() + " Delete", true, new DeleteCommand(app, this, folder, MessagePanel.images)); + contextMenu.addItem(delete); + + MenuItem properties = new MenuItem("" + AbstractImagePrototype.create(newImages.viewText()).getHTML() + " Properties", true, new PropertiesCommand(app, this, folder, newImages, 0)); + contextMenu.addItem(properties); + } + } + } + else { + if (!folder.isTrash()) { + MenuItem restore = new MenuItem("" + AbstractImagePrototype.create(images.versions()).getHTML() + " Restore", true, new RestoreTrashCommand(app, this, folder)); + contextMenu.addItem(restore); + + MenuItem delete = new MenuItem("" + AbstractImagePrototype.create(newImages.delete()).getHTML() + " Delete", true, new DeleteCommand(app, this, folder, MessagePanel.images)); + contextMenu.addItem(delete); + } + else { + MenuItem emptyTrash = new MenuItem("" + AbstractImagePrototype.create(images.emptyTrash()).getHTML() + " Empty Trash", true, new EmptyTrashCommand(app, this)); + contextMenu.addItem(emptyTrash); + } + } add(contextMenu); } }