From 287c3d8d72801a98101c14a499f3a8bc7768f4cb Mon Sep 17 00:00:00 2001 From: Christos Stathis Date: Mon, 4 Jul 2011 17:49:49 +0300 Subject: [PATCH] Started implementation of new folder command --- .../gr/grnet/pithos/web/client/CellTreeView.java | 6 +- .../src/gr/grnet/pithos/web/client/FileList.java | 16 +- .../src/gr/grnet/pithos/web/client/FileMenu.java | 6 +- .../grnet/pithos/web/client/FolderContextMenu.java | 205 ++--------- .../pithos/web/client/FolderPropertiesDialog.java | 383 +++++++------------- .../web/client/commands/NewFolderCommand.java | 83 +---- .../web/client/commands/PropertiesCommand.java | 6 +- .../web/client/foldertree/FolderTreeView.java | 24 +- .../web/client/foldertree/FolderTreeViewModel.java | 35 +- 9 files changed, 218 insertions(+), 546 deletions(-) diff --git a/web_client/src/gr/grnet/pithos/web/client/CellTreeView.java b/web_client/src/gr/grnet/pithos/web/client/CellTreeView.java index 6218c03..ea5362f 100644 --- a/web_client/src/gr/grnet/pithos/web/client/CellTreeView.java +++ b/web_client/src/gr/grnet/pithos/web/client/CellTreeView.java @@ -335,9 +335,9 @@ public class CellTreeView extends Composite{ return; if (menu != null) menu.hide(); - menu = new FolderContextMenu(images); - menu.setPopupPosition(x, y); - menu.show(); +// menu = new FolderContextMenu(images); +// menu.setPopupPosition(x, y); +// menu.show(); } private boolean init=false; public boolean fetchRootFolders() { diff --git a/web_client/src/gr/grnet/pithos/web/client/FileList.java b/web_client/src/gr/grnet/pithos/web/client/FileList.java index ba847a4..402afa4 100644 --- a/web_client/src/gr/grnet/pithos/web/client/FileList.java +++ b/web_client/src/gr/grnet/pithos/web/client/FileList.java @@ -78,9 +78,7 @@ import com.google.gwt.safehtml.shared.SafeHtml; import com.google.gwt.safehtml.shared.SafeHtmlBuilder; import com.google.gwt.user.cellview.client.CellTable; import com.google.gwt.user.cellview.client.GssSimplePager; -import com.google.gwt.user.client.DOM; 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.Button; import com.google.gwt.user.client.ui.Composite; @@ -240,8 +238,6 @@ public class FileList extends Composite { */ private final Images images; - private FileContextMenu contextMenu; - private DragAndDropCellTable celltable; private final MultiSelectionModel selectionModel; @@ -451,7 +447,7 @@ public class FileList extends Composite { vp.addHandler(new ContextMenuHandler() { @Override public void onContextMenu(ContextMenuEvent event) { - contextMenu = new FileContextMenu(images, treeView.getSelection(), false); + FileContextMenu contextMenu = new FileContextMenu(images, treeView.getSelection(), false); int x = event.getNativeEvent().getClientX(); int y = event.getNativeEvent().getClientY(); contextMenu.setPopupPosition(x, y); @@ -477,11 +473,11 @@ public class FileList extends Composite { celltable.setPageSize(GSS.VISIBLE_FILE_COUNT); sinkEvents(Event.ONCONTEXTMENU); - sinkEvents(Event.ONMOUSEUP); - sinkEvents(Event.ONMOUSEDOWN); - sinkEvents(Event.ONCLICK); - sinkEvents(Event.ONKEYDOWN); - sinkEvents(Event.ONDBLCLICK); +// sinkEvents(Event.ONMOUSEUP); +// sinkEvents(Event.ONMOUSEDOWN); +// sinkEvents(Event.ONCLICK); +// sinkEvents(Event.ONKEYDOWN); +// sinkEvents(Event.ONDBLCLICK); GSS.preventIESelection(); } diff --git a/web_client/src/gr/grnet/pithos/web/client/FileMenu.java b/web_client/src/gr/grnet/pithos/web/client/FileMenu.java index 56979dc..c80e93e 100644 --- a/web_client/src/gr/grnet/pithos/web/client/FileMenu.java +++ b/web_client/src/gr/grnet/pithos/web/client/FileMenu.java @@ -197,9 +197,9 @@ public class FileMenu extends PopupPanel implements ClickHandler { boolean newFolderVisible = !(selectedItem != null && (selectedItem instanceof TrashResource || selectedItem instanceof TrashFolderResource || selectedItem instanceof SharedResource || selectedItem instanceof OthersResource || selectedItem instanceof OtherUserResource)); boolean uploadVisible = !(selectedItem != null && (selectedItem instanceof TrashResource || selectedItem instanceof TrashFolderResource || selectedItem instanceof SharedResource || selectedItem instanceof OthersResource || selectedItem instanceof OtherUserResource)); if(newFolderVisible){ - MenuItem newFolderItem = new MenuItem("" + AbstractImagePrototype.create(images.folderNew()).getHTML() + " New Folder", true, new NewFolderCommand(this, images)); - newFolderItem.getElement().setId("topMenu.file.newFolder"); - contextMenu.addItem(newFolderItem); +// MenuItem newFolderItem = new MenuItem("" + AbstractImagePrototype.create(images.folderNew()).getHTML() + " New Folder", true, new NewFolderCommand(this, images)); +// newFolderItem.getElement().setId("topMenu.file.newFolder"); +// contextMenu.addItem(newFolderItem); } if(uploadVisible){ MenuItem uploadItem = new MenuItem("" + AbstractImagePrototype.create(images.fileUpdate()).getHTML() + " Upload", true, new UploadFileCommand(this)); diff --git a/web_client/src/gr/grnet/pithos/web/client/FolderContextMenu.java b/web_client/src/gr/grnet/pithos/web/client/FolderContextMenu.java index 392d17d..4a77f38 100644 --- a/web_client/src/gr/grnet/pithos/web/client/FolderContextMenu.java +++ b/web_client/src/gr/grnet/pithos/web/client/FolderContextMenu.java @@ -45,6 +45,8 @@ 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.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; @@ -85,192 +87,43 @@ public class FolderContextMenu extends PopupPanel { * * @param newImages the image bundle passed on by the parent object */ - public FolderContextMenu(final Images newImages) { + public FolderContextMenu(final Images newImages, 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); setAnimationEnabled(true); images = newImages; + MenuBar contextMenu = new MenuBar(true); - pasteItem = new MenuItem("" + AbstractImagePrototype.create(newImages.paste()).getHTML() + " Paste", true, new PasteCommand(this)); - MenuBar contextMenu = new MenuBar(true); - - RestResource selectedItem = GSS.get().getTreeView().getSelection(); + MenuItem newFolder = new MenuItem("" + AbstractImagePrototype.create(newImages.folderNew()).getHTML() + " New Folder", true, new NewFolderCommand(this, folder, images)); + contextMenu.addItem(newFolder); - if(selectedItem != null) - if(selectedItem instanceof MyFolderResource){ - MenuItem newFolder = new MenuItem("" + AbstractImagePrototype.create(newImages.folderNew()).getHTML() + " New Folder", true, new NewFolderCommand(this, images)); - contextMenu.addItem(newFolder); - - MenuItem upload = new MenuItem("" + AbstractImagePrototype.create(newImages.fileUpdate()).getHTML() + " Upload", true, new UploadFileCommand(this)); - contextMenu.addItem(upload); - - boolean notRootFolder =(((MyFolderResource) selectedItem).getResource()).getParentURI() != null ? true : false; - if (notRootFolder) { - // 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); - contextMenu.addItem(pasteItem); - if (notRootFolder) { - // 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); - } - - if(selectedItem instanceof SharedFolderResource){ - MenuItem newFolder = new MenuItem("" + AbstractImagePrototype.create(newImages.folderNew()).getHTML() + " New Folder", true, new NewFolderCommand(this, images)); - contextMenu.addItem(newFolder); - - MenuItem upload = new MenuItem("" + AbstractImagePrototype.create(newImages.fileUpdate()).getHTML() + " Upload", true, new UploadFileCommand(this)); - contextMenu.addItem(upload); - - 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); - - contextMenu.addItem(pasteItem); - - 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); + // 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 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); - - } - if(selectedItem instanceof TrashFolderResource){ - MenuItem restore = new MenuItem("" + AbstractImagePrototype.create(newImages.viewText()).getHTML() + " Restore folder and contents", true, new RestoreTrashCommand(this)); - contextMenu.addItem(restore); - - 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); - - } - if(selectedItem instanceof OthersFolderResource){ - MenuItem newFolder = new MenuItem("" + AbstractImagePrototype.create(newImages.folderNew()).getHTML() + " New Folder", true, new NewFolderCommand(this, images)); - contextMenu.addItem(newFolder); + MenuItem copy = new MenuItem("" + AbstractImagePrototype.create(newImages.copy()).getHTML() + " Copy", true, new CopyCommand(this)); + contextMenu.addItem(copy); - MenuItem upload = new MenuItem("" + AbstractImagePrototype.create(newImages.fileUpdate()).getHTML() + " Upload", true, new UploadFileCommand(this)); - contextMenu.addItem(upload); - - 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); - - contextMenu.addItem(pasteItem); - - 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); + 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); - 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); - - } - if(selectedItem instanceof TrashResource){ - MenuItem restore = new MenuItem("" + AbstractImagePrototype.create(newImages.delete()).getHTML() + " Restore Trash", true, new RestoreTrashCommand(this)); - contextMenu.addItem(restore); - - MenuItem emptyTrash = new MenuItem("" + AbstractImagePrototype.create(newImages.delete()).getHTML() + " Empty Trash", true, new EmptyTrashCommand(this)); - contextMenu.addItem(emptyTrash); - - MenuItem refresh = new MenuItem("" + AbstractImagePrototype.create(images.refresh()).getHTML() + " Refresh", true, new RefreshCommand(this, images)); - contextMenu.addItem(refresh); - - } - if(selectedItem instanceof SharedResource || selectedItem instanceof OthersResource || selectedItem instanceof OtherUserResource){ - MenuItem refresh = new MenuItem("" + AbstractImagePrototype.create(images.refresh()).getHTML() + " Refresh", true, new RefreshCommand(this, images)); - contextMenu.addItem(refresh); - - } - - /* - if(folders.isTrashItem(selectedItem)){ - if (folders.isTrash(selectedItem)){ - contextMenu.addItem("" + AbstractImagePrototype.create(newImages.delete()).getHTML() + " Empty Trash", true, new EmptyTrashCommand(this)); - contextMenu.addItem("" + AbstractImagePrototype.create(images.refresh()).getHTML() + " Refresh", true, new RefreshCommand(this, images)); - } - else { - contextMenu.addItem("" + AbstractImagePrototype.create(newImages.viewText()).getHTML() + " Restore folder and contents", true, new RestoreTrashCommand(this)); - contextMenu.addItem("" + AbstractImagePrototype.create(newImages.delete()).getHTML() + " Delete", true, new DeleteCommand(this, newImages)); - contextMenu.addItem("" + AbstractImagePrototype.create(images.refresh()).getHTML() + " Refresh", true, new RefreshCommand(this, images)); - } - } - else if(folders.isFileItem(selectedItem)){ - - } - else if(!folders.isMyShares(selectedItem) && folders.isMySharedItem(selectedItem)){ - contextMenu.addItem("" + AbstractImagePrototype.create(newImages.folderNew()).getHTML() + " New Folder", true, new NewFolderCommand(this, images)); - contextMenu.addItem("" + AbstractImagePrototype.create(newImages.fileUpdate()).getHTML() + " Upload", true, new UploadFileCommand(this)); - contextMenu.addItem("" + AbstractImagePrototype.create(newImages.cut()).getHTML() + " Cut", true, new CutCommand(this)); - contextMenu.addItem("" + AbstractImagePrototype.create(newImages.copy()).getHTML() + " Copy", true, new CopyCommand(this)); - contextMenu.addItem(pasteItem); - contextMenu.addItem("" + AbstractImagePrototype.create(newImages.emptyTrash()).getHTML() + " Move to Trash", true, new ToTrashCommand(this)); - contextMenu.addItem("" + AbstractImagePrototype.create(newImages.delete()).getHTML() + " Delete", true, new DeleteCommand(this, newImages)); - contextMenu.addItem("" + AbstractImagePrototype.create(images.refresh()).getHTML() + " Refresh", true, new RefreshCommand(this, images)); - contextMenu.addItem("" + AbstractImagePrototype.create(newImages.sharing()).getHTML() + " Sharing", true, new PropertiesCommand(this, newImages, 1)); - contextMenu.addItem("" + AbstractImagePrototype.create(newImages.viewText()).getHTML() + " Properties", true, new PropertiesCommand(this, newImages, 0)); - } - else if(!folders.isOthersShared(selectedItem) && folders.isOthersSharedItem(selectedItem) && !(GSS.get().getCurrentSelection() instanceof OtherUserResource)){ - contextMenu.addItem("" + AbstractImagePrototype.create(newImages.folderNew()).getHTML() + " New Folder", true, new NewFolderCommand(this, images)); - contextMenu.addItem("" + AbstractImagePrototype.create(newImages.fileUpdate()).getHTML() + " Upload", true, new UploadFileCommand(this)); - contextMenu.addItem("" + AbstractImagePrototype.create(newImages.cut()).getHTML() + " Cut", true, new CutCommand(this)); - contextMenu.addItem("" + AbstractImagePrototype.create(newImages.copy()).getHTML() + " Copy", true, new CopyCommand(this)); - contextMenu.addItem(pasteItem); - contextMenu.addItem("" + AbstractImagePrototype.create(newImages.emptyTrash()).getHTML() + " Move to Trash", true, new ToTrashCommand(this)); - contextMenu.addItem("" + AbstractImagePrototype.create(newImages.delete()).getHTML() + " Delete", true, new DeleteCommand(this, newImages)); - contextMenu.addItem("" + AbstractImagePrototype.create(images.refresh()).getHTML() + " Refresh", true, new RefreshCommand(this, images)); - contextMenu.addItem("" + AbstractImagePrototype.create(newImages.sharing()).getHTML() + " Sharing", true, new PropertiesCommand(this, newImages, 1)); - contextMenu.addItem("" + AbstractImagePrototype.create(newImages.viewText()).getHTML() + " Properties", true, new PropertiesCommand(this, newImages, 0)); - } else if(!selectedItem.equals(folders.getSharesItem())) - contextMenu.addItem("" + AbstractImagePrototype.create(images.refresh()).getHTML() + " Refresh", true, new RefreshCommand(this, images)); - */ - add(contextMenu); - if (GSS.get().getClipboard().hasFolderOrFileItem()) - pasteItem.setVisible(true); - else - pasteItem.setVisible(false); } - } diff --git a/web_client/src/gr/grnet/pithos/web/client/FolderPropertiesDialog.java b/web_client/src/gr/grnet/pithos/web/client/FolderPropertiesDialog.java index 6544cf2..c1112f6 100644 --- a/web_client/src/gr/grnet/pithos/web/client/FolderPropertiesDialog.java +++ b/web_client/src/gr/grnet/pithos/web/client/FolderPropertiesDialog.java @@ -34,30 +34,20 @@ */ package gr.grnet.pithos.web.client; -import gr.grnet.pithos.web.client.FilePropertiesDialog.Images; +import com.google.gwt.event.dom.client.KeyDownEvent; +import com.google.gwt.user.client.Event; +import gr.grnet.pithos.web.client.foldertree.Folder; import gr.grnet.pithos.web.client.rest.PostCommand; import gr.grnet.pithos.web.client.rest.RestException; -import gr.grnet.pithos.web.client.rest.resource.FolderResource; -import gr.grnet.pithos.web.client.rest.resource.GroupResource; -import gr.grnet.pithos.web.client.rest.resource.PermissionHolder; import gr.grnet.pithos.web.client.rest.resource.RestResourceWrapper; -import java.util.List; -import java.util.Set; - import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.NativeEvent; -import com.google.gwt.event.dom.client.ChangeEvent; -import com.google.gwt.event.dom.client.ChangeHandler; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.dom.client.KeyCodes; import com.google.gwt.http.client.URL; import com.google.gwt.i18n.client.DateTimeFormat; -import com.google.gwt.json.client.JSONArray; -import com.google.gwt.json.client.JSONBoolean; -import com.google.gwt.json.client.JSONObject; -import com.google.gwt.json.client.JSONString; import com.google.gwt.user.client.DeferredCommand; import com.google.gwt.user.client.Event.NativePreviewEvent; import com.google.gwt.user.client.ui.Button; @@ -77,10 +67,6 @@ import com.google.gwt.user.client.ui.VerticalPanel; */ public class FolderPropertiesDialog extends DialogBox { - private List groups = null; - - final PermissionsList permList; - private CheckBox readForAll; /** @@ -94,19 +80,18 @@ public class FolderPropertiesDialog extends DialogBox { */ private final boolean create; - final FolderResource folder; + final Folder folder; final TabPanel inner; /** * The widget's constructor. * - * @param images the image icons from the file properties dialog * @param _create true if the dialog is displayed for creating a new * sub-folder of the selected folder, false if it is displayed * for modifying the selected folder */ - public FolderPropertiesDialog(Images images, boolean _create, final List _groups) { + public FolderPropertiesDialog(boolean _create, Folder selected) { setAnimationEnabled(true); // Enable IE selection for the dialog (must disable it upon closing it) @@ -114,9 +99,7 @@ public class FolderPropertiesDialog extends DialogBox { create = _create; - folder = ((RestResourceWrapper) GSS.get().getTreeView().getSelection()).getResource(); - permList = new PermissionsList(images, folder.getPermissions(), folder.getOwner()); - groups = _groups; + folder = selected; // Use this opportunity to set the dialog's caption. if (create) @@ -141,42 +124,22 @@ public class FolderPropertiesDialog extends DialogBox { inner.add(permPanel, "Sharing"); inner.selectTab(0); - final Label folderNameNote = new Label("Please note that slashes ('/') are not allowed in folder names.", true); - folderNameNote.setVisible(false); - folderNameNote.setStylePrimaryName("pithos-readForAllNote"); - FlexTable generalTable = new FlexTable(); generalTable.setText(0, 0, "Name"); generalTable.setText(1, 0, "Parent"); generalTable.setText(2, 0, "Creator"); generalTable.setText(3, 0, "Last modified"); folderName.setText(create ? "" : folder.getName()); - folderName.getElement().setId("folderPropertiesDialog.textBox.name"); generalTable.setWidget(0, 1, folderName); - folderName.addChangeHandler(new ChangeHandler() { - - @Override - public void onChange(ChangeEvent event) { - if(folderName.getText().contains("/")) - folderNameNote.setVisible(true); - else - folderNameNote.setVisible(false); - - } - }); - if (create) generalTable.setText(1, 1, folder.getName()); - else if(folder.getParentName() == null) - generalTable.setText(1, 1, "-"); else - generalTable.setText(1, 1, folder.getParentName()); - generalTable.setWidget(0, 2, folderNameNote); - generalTable.setText(2, 1, folder.getOwner()); + generalTable.setText(1, 1, folder.getPrefix()); + generalTable.setText(2, 1, ""); DateTimeFormat formatter = DateTimeFormat.getFormat("d/M/yyyy h:mm a"); - if(folder.getModificationDate() != null) - generalTable.setText(3, 1, formatter.format(folder.getModificationDate())); + if(folder.getLastModified() != null) + generalTable.setText(3, 1, formatter.format(folder.getLastModified())); generalTable.getFlexCellFormatter().setStyleName(0, 0, "props-labels"); generalTable.getFlexCellFormatter().setStyleName(1, 0, "props-labels"); generalTable.getFlexCellFormatter().setStyleName(2, 0, "props-labels"); @@ -196,18 +159,11 @@ public class FolderPropertiesDialog extends DialogBox { okLabel = "Update"; Button ok = new Button(okLabel, new ClickHandler() { @Override - public void onClick(ClickEvent event) { - if(folderName.getText().contains("/")) - folderNameNote.setVisible(true); - else { - folderNameNote.setVisible(false); - createOrUpdateFolder(); - closeDialog(); - } - + public void onClick(ClickEvent event) { + createOrUpdateFolder(); + closeDialog(); } }); - ok.getElement().setId("folderPropertiesDialog.button.ok"); buttons.add(ok); buttons.setCellHorizontalAlignment(ok, HasHorizontalAlignment.ALIGN_CENTER); // Create the 'Cancel' button, along with a listener that hides the @@ -219,91 +175,13 @@ public class FolderPropertiesDialog extends DialogBox { closeDialog(); } }); - cancel.getElement().setId("folderPropertiesDialog.button.cancel"); buttons.add(cancel); buttons.setCellHorizontalAlignment(cancel, HasHorizontalAlignment.ALIGN_CENTER); buttons.setSpacing(8); buttons.addStyleName("pithos-TabPanelBottom"); - Button add = new Button("Add Group", new ClickHandler() { - @Override - public void onClick(ClickEvent event) { - PermissionsAddDialog dlg = new PermissionsAddDialog(groups, permList, false); - dlg.center(); - } - }); - add.getElement().setId("folderPropertiesDialog.button.addGroup"); - permButtons.add(add); - permButtons.setCellHorizontalAlignment(add, HasHorizontalAlignment.ALIGN_CENTER); - - Button addUser = new Button("Add User", new ClickHandler() { - @Override - public void onClick(ClickEvent event) { - PermissionsAddDialog dlg = new PermissionsAddDialog(groups, permList, true); - dlg.center(); - } - }); - addUser.getElement().setId("folderPropertiesDialog.button.addUser"); - permButtons.add(addUser); - permButtons.setCellHorizontalAlignment(addUser, HasHorizontalAlignment.ALIGN_CENTER); - - permButtons.setCellHorizontalAlignment(cancel, HasHorizontalAlignment.ALIGN_CENTER); - permButtons.setSpacing(8); - permButtons.addStyleName("pithos-TabPanelBottom"); - - final Label readForAllNote = new Label("When this option is enabled, the folder will be readable" + - " by everyone. By checking this option, you are certifying that you have the right to " + - "distribute this folder's contents and that it does not violate the Terms of Use.", true); - readForAllNote.setVisible(false); - readForAllNote.setStylePrimaryName("pithos-readForAllNote"); - - readForAll = new CheckBox(); - readForAll.getElement().setId("folderPropertiesDialog.checkBox.public"); - readForAll.setValue(folder.isReadForAll()); - readForAll.addClickHandler(new ClickHandler() { - @Override - public void onClick(ClickEvent event) { - readForAllNote.setVisible(readForAll.getValue()); - } - - }); - generalPanel.add(generalTable); - permPanel.add(permList); - permPanel.add(permButtons); - - // Only show the read for all permission if the user is the owner. - if (folder.getOwner().equals(GSS.get().getCurrentUserResource().getUsername())) { - permForAll.add(new Label("Public")); - permForAll.add(readForAll); - permForAll.setSpacing(8); - permForAll.addStyleName("pithos-TabPanelBottom"); - permForAll.add(readForAllNote); - permPanel.add(permForAll); - } - TextBox path = new TextBox(); - path.getElement().setId("folderPropertiesDialog.textBox.link"); - path.setWidth("100%"); - path.addClickHandler(new ClickHandler() { - @Override - public void onClick(ClickEvent event) { - GSS.enableIESelection(); - ((TextBox) event.getSource()).selectAll(); - GSS.preventIESelection(); - } - }); - path.setText(folder.getUri()); - path.setTitle("Use this link for sharing the folder via e-mail, IM, etc. (crtl-C/cmd-C to copy to system clipboard)"); - path.setWidth("100%"); - path.setReadOnly(true); - pathPanel.setWidth("100%"); - pathPanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT); - pathPanel.add(new Label("Link")); - pathPanel.setSpacing(8); - pathPanel.addStyleName("pithos-TabPanelBottom"); - pathPanel.add(path); - permPanel.add(pathPanel); outer.add(inner); outer.add(buttons); @@ -329,7 +207,7 @@ public class FolderPropertiesDialog extends DialogBox { super.onPreviewNativeEvent(preview); NativeEvent evt = preview.getNativeEvent(); - if (evt.getType().equals("keydown")) + if (evt.getType().equals(KeyDownEvent.getType().getName())) // Use the popup's key preview hooks to close the dialog when either // enter or escape is pressed. switch (evt.getKeyCode()) { @@ -355,52 +233,45 @@ public class FolderPropertiesDialog extends DialogBox { /** * Generate an RPC request to create a new folder. - * - * @param userId the ID of the user whose namespace will be searched for - * folders - * @param _folderName the name of the folder to create */ private void createFolder() { String name = folderName.getText(); - if (!GSS.isValidResourceName(name)) { - GSS.get().displayError("The folder name '" + name + "' is invalid"); - return; - } - PostCommand ep = new PostCommand(folder.getUri() + "?new=" + - URL.encodeComponent(name), "", 201) { - @Override - public void onComplete() { - //TODO:CELLTREE - if(folder.getUri().equals(GSS.get().getTreeView().getMyFolders().getUri())){ - GSS.get().getTreeView().updateRootNode(); - } - else - GSS.get().getTreeView().updateNodeChildren((RestResourceWrapper) GSS.get().getTreeView().getSelection()); - //GSS.get().getFolders().updateFolder((DnDTreeItem) GSS.get().getFolders().getCurrent()); - } - - @Override - public void onError(Throwable t) { - GWT.log("", t); - if(t instanceof RestException){ - int statusCode = ((RestException)t).getHttpStatusCode(); - if(statusCode == 405) - GSS.get().displayError("You don't have the necessary" + - " permissions or a folder with same name " + - "already exists"); - else if(statusCode == 404) - GSS.get().displayError("Resource not found"); - else - GSS.get().displayError("Unable to create folder:" + - ((RestException)t).getHttpStatusText()); - } - else - GSS.get().displayError("System error creating folder:" + - t.getMessage()); - } - }; - DeferredCommand.addCommand(ep); +// PostCommand ep = new PostCommand(folder.getUri() + "?new=" + +// URL.encodeComponent(name), "", 201) { +// +// @Override +// public void onComplete() { +// //TODO:CELLTREE +// if(folder.getUri().equals(GSS.get().getTreeView().getMyFolders().getUri())){ +// GSS.get().getTreeView().updateRootNode(); +// } +// else +// GSS.get().getTreeView().updateNodeChildren((RestResourceWrapper) GSS.get().getTreeView().getSelection()); +// //GSS.get().getFolders().updateFolder((DnDTreeItem) GSS.get().getFolders().getCurrent()); +// } +// +// @Override +// public void onError(Throwable t) { +// GWT.log("", t); +// if(t instanceof RestException){ +// int statusCode = ((RestException)t).getHttpStatusCode(); +// if(statusCode == 405) +// GSS.get().displayError("You don't have the necessary" + +// " permissions or a folder with same name " + +// "already exists"); +// else if(statusCode == 404) +// GSS.get().displayError("Resource not found"); +// else +// GSS.get().displayError("Unable to create folder:" + +// ((RestException)t).getHttpStatusText()); +// } +// else +// GSS.get().displayError("System error creating folder:" + +// t.getMessage()); +// } +// }; +// DeferredCommand.addCommand(ep); } @@ -408,8 +279,6 @@ public class FolderPropertiesDialog extends DialogBox { * Upon closing the dialog by clicking OK or pressing ENTER this method does * the actual work of modifying folder properties or creating a new Folder * depending on the value of the create field - * - * @param userId */ private void createOrUpdateFolder() { if (create) @@ -420,83 +289,83 @@ public class FolderPropertiesDialog extends DialogBox { } private void updateFolder() { - permList.updatePermissionsAccordingToInput(); - Set perms = permList.getPermissions(); - JSONObject json = new JSONObject(); - if(!folder.getName().equals(folderName.getText())) - json.put("name", new JSONString(folderName.getText())); - //only update the read for all perm if the user is the owner - if (readForAll.getValue() != folder.isReadForAll()) - if (folder.getOwner().equals(GSS.get().getCurrentUserResource().getUsername())) - json.put("readForAll", JSONBoolean.getInstance(readForAll.getValue())); - if (permList.hasChanges()) { - JSONArray perma = new JSONArray(); - int i=0; - for(PermissionHolder p : perms){ - JSONObject po = new JSONObject(); - if(p.getUser() != null) - po.put("user", new JSONString(p.getUser())); - if(p.getGroup() != null) - po.put("group", new JSONString(p.getGroup())); - po.put("read", JSONBoolean.getInstance(p.isRead())); - po.put("write", JSONBoolean.getInstance(p.isWrite())); - po.put("modifyACL", JSONBoolean.getInstance(p.isModifyACL())); - perma.set(i,po); - i++; - } - json.put("permissions", perma); - GWT.log(json.toString(), null); - } - PostCommand ep = new PostCommand(folder.getUri()+"?update=", json.toString(), 200){ - - @Override - public void onComplete() { - //TODO:CELLTREE - - if(getPostBody() != null && !"".equals(getPostBody().trim())){ - - - FolderResource fres = ((RestResourceWrapper) GSS.get().getTreeView().getSelection()).getResource(); - String initialPath = fres.getUri(); - String newPath = getPostBody().trim(); - fres.setUri(newPath); - ((RestResourceWrapper) GSS.get().getTreeView().getSelection()).getResource().setUri(newPath); - ((RestResourceWrapper) GSS.get().getTreeView().getSelection()).setUri(newPath); - GSS.get().getTreeView().updateNodeChildren(fres.getParentURI()); - if (permList.hasChanges()) { - GSS.get().getTreeView().updateMySharedNode(); - } - /* - if(folderItem.getParentItem() != null && ((DnDTreeItem)folderItem.getParentItem()).getFolderResource() != null){ - ((DnDTreeItem)folderItem.getParentItem()).getFolderResource().removeSubfolderPath(initialPath); - ((DnDTreeItem)folderItem.getParentItem()).getFolderResource().getSubfolderPaths().add(newPath); - }*/ - } - //GSS.get().getFolders().updateFolder( (DnDTreeItem) GSS.get().getFolders().getCurrent()); - - GSS.get().showFileList(true); - } - - @Override - public void onError(Throwable t) { - GWT.log("", t); - if(t instanceof RestException){ - int statusCode = ((RestException)t).getHttpStatusCode(); - if(statusCode == 405) - GSS.get().displayError("You don't have the necessary permissions or" + - " a folder with same name already exists"); - else if(statusCode == 404) - GSS.get().displayError("Resource not found, or user specified in sharing does not exist"); - else - GSS.get().displayError("Unable to update folder: "+((RestException)t).getHttpStatusText()); - } - else - GSS.get().displayError("System error moifying file: "+t.getMessage()); - //TODO:CELLTREE - //GSS.get().getFolders().updateFolder( (DnDTreeItem) GSS.get().getFolders().getCurrent()); - } - }; - DeferredCommand.addCommand(ep); +// permList.updatePermissionsAccordingToInput(); +// Set perms = permList.getPermissions(); +// JSONObject json = new JSONObject(); +// if(!folder.getName().equals(folderName.getText())) +// json.put("name", new JSONString(folderName.getText())); +// //only update the read for all perm if the user is the owner +// if (readForAll.getValue() != folder.isReadForAll()) +// if (folder.getOwner().equals(GSS.get().getCurrentUserResource().getUsername())) +// json.put("readForAll", JSONBoolean.getInstance(readForAll.getValue())); +// if (permList.hasChanges()) { +// JSONArray perma = new JSONArray(); +// int i=0; +// for(PermissionHolder p : perms){ +// JSONObject po = new JSONObject(); +// if(p.getUser() != null) +// po.put("user", new JSONString(p.getUser())); +// if(p.getGroup() != null) +// po.put("group", new JSONString(p.getGroup())); +// po.put("read", JSONBoolean.getInstance(p.isRead())); +// po.put("write", JSONBoolean.getInstance(p.isWrite())); +// po.put("modifyACL", JSONBoolean.getInstance(p.isModifyACL())); +// perma.set(i,po); +// i++; +// } +// json.put("permissions", perma); +// GWT.log(json.toString(), null); +// } +// PostCommand ep = new PostCommand(folder.getUri()+"?update=", json.toString(), 200){ +// +// @Override +// public void onComplete() { +// //TODO:CELLTREE +// +// if(getPostBody() != null && !"".equals(getPostBody().trim())){ +// +// +// FolderResource fres = ((RestResourceWrapper) GSS.get().getTreeView().getSelection()).getResource(); +// String initialPath = fres.getUri(); +// String newPath = getPostBody().trim(); +// fres.setUri(newPath); +// ((RestResourceWrapper) GSS.get().getTreeView().getSelection()).getResource().setUri(newPath); +// ((RestResourceWrapper) GSS.get().getTreeView().getSelection()).setUri(newPath); +// GSS.get().getTreeView().updateNodeChildren(fres.getParentURI()); +// if (permList.hasChanges()) { +// GSS.get().getTreeView().updateMySharedNode(); +// } +// /* +// if(folderItem.getParentItem() != null && ((DnDTreeItem)folderItem.getParentItem()).getFolderResource() != null){ +// ((DnDTreeItem)folderItem.getParentItem()).getFolderResource().removeSubfolderPath(initialPath); +// ((DnDTreeItem)folderItem.getParentItem()).getFolderResource().getSubfolderPaths().add(newPath); +// }*/ +// } +// //GSS.get().getFolders().updateFolder( (DnDTreeItem) GSS.get().getFolders().getCurrent()); +// +// GSS.get().showFileList(true); +// } +// +// @Override +// public void onError(Throwable t) { +// GWT.log("", t); +// if(t instanceof RestException){ +// int statusCode = ((RestException)t).getHttpStatusCode(); +// if(statusCode == 405) +// GSS.get().displayError("You don't have the necessary permissions or" + +// " a folder with same name already exists"); +// else if(statusCode == 404) +// GSS.get().displayError("Resource not found, or user specified in sharing does not exist"); +// else +// GSS.get().displayError("Unable to update folder: "+((RestException)t).getHttpStatusText()); +// } +// else +// GSS.get().displayError("System error moifying file: "+t.getMessage()); +// //TODO:CELLTREE +// //GSS.get().getFolders().updateFolder( (DnDTreeItem) GSS.get().getFolders().getCurrent()); +// } +// }; +// DeferredCommand.addCommand(ep); } public void selectTab(int _tab) { diff --git a/web_client/src/gr/grnet/pithos/web/client/commands/NewFolderCommand.java b/web_client/src/gr/grnet/pithos/web/client/commands/NewFolderCommand.java index 069dd77..be21779 100644 --- a/web_client/src/gr/grnet/pithos/web/client/commands/NewFolderCommand.java +++ b/web_client/src/gr/grnet/pithos/web/client/commands/NewFolderCommand.java @@ -34,9 +34,13 @@ */ package gr.grnet.pithos.web.client.commands; +import com.google.gwt.event.logical.shared.CloseEvent; +import com.google.gwt.event.logical.shared.CloseHandler; import gr.grnet.pithos.web.client.FileMenu.Images; import gr.grnet.pithos.web.client.FolderPropertiesDialog; import gr.grnet.pithos.web.client.GSS; +import gr.grnet.pithos.web.client.foldertree.Folder; +import gr.grnet.pithos.web.client.foldertree.FolderTreeView; import gr.grnet.pithos.web.client.rest.GetCommand; import gr.grnet.pithos.web.client.rest.MultipleGetCommand; import gr.grnet.pithos.web.client.rest.resource.GroupResource; @@ -58,6 +62,8 @@ import com.google.gwt.user.client.ui.PopupPanel; */ public class NewFolderCommand implements Command{ private PopupPanel containerPanel; + + private Folder folder; final Images images; private List groups = null; @@ -66,83 +72,22 @@ public class NewFolderCommand implements Command{ * @param aContainerPanel * @param newImages the images of the new folder dialog */ - public NewFolderCommand(PopupPanel aContainerPanel, final Images newImages){ + public NewFolderCommand(PopupPanel aContainerPanel, Folder folder, final Images newImages){ containerPanel = aContainerPanel; images=newImages; + this.folder = folder; } @Override public void execute() { containerPanel.hide(); - getGroups(); - DeferredCommand.addCommand(new IncrementalCommand() { - - @Override - public boolean execute() { - boolean res = canContinue(); - if (res) { - displayNewFolder(); - return false; - } - return true; - } - - }); + displayNewFolderDialog(); } - private boolean canContinue() { - if (groups == null) - return false; - return true; + void displayNewFolderDialog() { + if (folder != null) { + FolderPropertiesDialog dlg = new FolderPropertiesDialog(true, folder); + dlg.center(); + } } - - void displayNewFolder() { - RestResource currentFolder = GSS.get().getTreeView().getSelection(); - if (currentFolder == null) { - GSS.get().displayError("You have to select the parent folder first"); - return; - } - FolderPropertiesDialog dlg = new FolderPropertiesDialog(images, true, groups); - dlg.center(); - } - - private void getGroups() { - GetCommand gg = new GetCommand(GroupsResource.class, GSS.get().getCurrentUserResource().getGroupsPath(), null){ - - @Override - public void onComplete() { - GroupsResource res = getResult(); - MultipleGetCommand ga = new MultipleGetCommand(GroupResource.class, res.getGroupPaths().toArray(new String[]{}), null){ - - @Override - public void onComplete() { - List groupList = getResult(); - groups = groupList; - } - - @Override - public void onError(Throwable t) { - GWT.log("", t); - GSS.get().displayError("Unable to fetch groups"); - groups = new ArrayList(); - } - - @Override - public void onError(String p, Throwable throwable) { - GWT.log("Path:"+p, throwable); - } - }; - DeferredCommand.addCommand(ga); - } - - @Override - public void onError(Throwable t) { - GWT.log("", t); - GSS.get().displayError("Unable to fetch groups"); - groups = new ArrayList(); - } - }; - DeferredCommand.addCommand(gg); - } - } diff --git a/web_client/src/gr/grnet/pithos/web/client/commands/PropertiesCommand.java b/web_client/src/gr/grnet/pithos/web/client/commands/PropertiesCommand.java index 26aa658..85f53af 100644 --- a/web_client/src/gr/grnet/pithos/web/client/commands/PropertiesCommand.java +++ b/web_client/src/gr/grnet/pithos/web/client/commands/PropertiesCommand.java @@ -206,9 +206,9 @@ public class PropertiesCommand implements Command { */ void displayProperties(final Images propImages, final String _userName) { if (GSS.get().getCurrentSelection() instanceof RestResourceWrapper) { - FolderPropertiesDialog dlg = new FolderPropertiesDialog(propImages, false, groups); - dlg.selectTab(tabToShow); - dlg.center(); +// FolderPropertiesDialog dlg = new FolderPropertiesDialog(propImages, false, groups); +// dlg.selectTab(tabToShow); +// dlg.center(); } else if (GSS.get().getCurrentSelection() instanceof FileResource) { FilePropertiesDialog dlg = new FilePropertiesDialog(propImages, groups, versions, _userName); dlg.selectTab(tabToShow); diff --git a/web_client/src/gr/grnet/pithos/web/client/foldertree/FolderTreeView.java b/web_client/src/gr/grnet/pithos/web/client/foldertree/FolderTreeView.java index bb3313a..a70a4a1 100644 --- a/web_client/src/gr/grnet/pithos/web/client/foldertree/FolderTreeView.java +++ b/web_client/src/gr/grnet/pithos/web/client/foldertree/FolderTreeView.java @@ -35,18 +35,14 @@ package gr.grnet.pithos.web.client.foldertree; -import com.google.gwt.cell.client.AbstractCell; import com.google.gwt.core.client.GWT; import com.google.gwt.resources.client.ClientBundle; import com.google.gwt.resources.client.ImageResource; import com.google.gwt.resources.client.ImageResource.ImageOptions; import com.google.gwt.safehtml.client.SafeHtmlTemplates; import com.google.gwt.safehtml.shared.SafeHtml; -import com.google.gwt.safehtml.shared.SafeHtmlBuilder; import com.google.gwt.user.cellview.client.CellTree; import com.google.gwt.user.cellview.client.HasKeyboardSelectionPolicy.KeyboardSelectionPolicy; -import com.google.gwt.user.client.Event; -import com.google.gwt.user.client.ui.AbstractImagePrototype; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.Tree; import gr.grnet.pithos.web.client.FolderContextMenu; @@ -77,29 +73,18 @@ public class FolderTreeView extends Composite { ImageResource home(); @Source("gr/grnet/pithos/resources/folder_yellow.png") - ImageResource folderYellow(); + public ImageResource folderYellow(); } - private static Images images = GWT.create(Images.class); + static Images images = GWT.create(Images.class); static interface Templates extends SafeHtmlTemplates { - Templates INSTANCE = GWT.create(Templates.class); + public Templates INSTANCE = GWT.create(Templates.class); @Template("{0}") public SafeHtml nameSpan(String name); } - static class FolderCell extends AbstractCell { - - @Override - public void render(Context context, Folder folder, SafeHtmlBuilder safeHtmlBuilder) { - String html = AbstractImagePrototype.create(images.folderYellow()).getHTML(); - safeHtmlBuilder.appendHtmlConstant(html); - safeHtmlBuilder.append(Templates.INSTANCE.nameSpan(folder.getName())); - } - } - - private FolderTreeViewModel model; public FolderTreeView(FolderTreeViewModel viewModel) { @@ -114,11 +99,10 @@ public class FolderTreeView extends Composite { tree.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.ENABLED); - sinkEvents(Event.ONCONTEXTMENU); - sinkEvents(Event.ONMOUSEUP); initWidget(tree); } + public Folder getSelection() { return model.getSelection(); } diff --git a/web_client/src/gr/grnet/pithos/web/client/foldertree/FolderTreeViewModel.java b/web_client/src/gr/grnet/pithos/web/client/foldertree/FolderTreeViewModel.java index ff7c911..53320f3 100644 --- a/web_client/src/gr/grnet/pithos/web/client/foldertree/FolderTreeViewModel.java +++ b/web_client/src/gr/grnet/pithos/web/client/foldertree/FolderTreeViewModel.java @@ -35,16 +35,20 @@ package gr.grnet.pithos.web.client.foldertree; +import com.google.gwt.cell.client.AbstractCell; +import com.google.gwt.cell.client.Cell; import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.Scheduler; import com.google.gwt.core.client.Scheduler.ScheduledCommand; +import com.google.gwt.event.dom.client.ContextMenuEvent; +import com.google.gwt.safehtml.shared.SafeHtmlBuilder; +import com.google.gwt.user.client.ui.AbstractImagePrototype; import com.google.gwt.view.client.ListDataProvider; -import com.google.gwt.view.client.SelectionChangeEvent; -import com.google.gwt.view.client.SelectionChangeEvent.Handler; import com.google.gwt.view.client.SingleSelectionModel; import com.google.gwt.view.client.TreeViewModel; +import gr.grnet.pithos.web.client.FolderContextMenu; import gr.grnet.pithos.web.client.GSS; -import gr.grnet.pithos.web.client.foldertree.FolderTreeView.FolderCell; +import gr.grnet.pithos.web.client.foldertree.FolderTreeView.Templates; import gr.grnet.pithos.web.client.rest.GetRequest; import gr.grnet.pithos.web.client.rest.RestException; import java.util.Iterator; @@ -52,6 +56,27 @@ import java.util.Set; public class FolderTreeViewModel implements TreeViewModel { + private Cell folderCell = new AbstractCell(ContextMenuEvent.getType().getName()) { + + @Override + public void render(Context context, Folder folder, SafeHtmlBuilder safeHtmlBuilder) { + String html = AbstractImagePrototype.create(FolderTreeView.images.folderYellow()).getHTML(); + safeHtmlBuilder.appendHtmlConstant(html); + safeHtmlBuilder.append(Templates.INSTANCE.nameSpan(folder.getName())); + } + + @Override + public void onBrowserEvent(Cell.Context context, com.google.gwt.dom.client.Element parent, Folder folder, com.google.gwt.dom.client.NativeEvent event, com.google.gwt.cell.client.ValueUpdater valueUpdater) { + if (event.getType().equals(ContextMenuEvent.getType().getName())) { + Folder target = (Folder) context.getKey(); + FolderTreeViewModel.this.selectionModel.setSelected(target, true); + FolderContextMenu menu = new FolderContextMenu(FolderTreeView.images, target); + menu.setPopupPosition(event.getClientX(), event.getClientY()); + menu.show(); + } + } + }; + private ListDataProvider rootDataProvider = new ListDataProvider(); private SingleSelectionModel selectionModel; @@ -65,7 +90,7 @@ public class FolderTreeViewModel implements TreeViewModel { if (value == null) { Folder f = new Folder("Loading ..."); rootDataProvider.getList().add(f); - return new DefaultNodeInfo(rootDataProvider, new FolderCell(), selectionModel, null); + return new DefaultNodeInfo(rootDataProvider, folderCell, selectionModel, null); } else { final Folder f = (Folder) value; @@ -96,7 +121,7 @@ public class FolderTreeViewModel implements TreeViewModel { Scheduler.get().scheduleDeferred(getFolder); } }); - return new DefaultNodeInfo(dataProvider, new FolderCell(), selectionModel, null); + return new DefaultNodeInfo(dataProvider, folderCell, selectionModel, null); } } -- 1.7.10.4