X-Git-Url: https://code.grnet.gr/git/pithos/blobdiff_plain/16baf609bb746ccbc6cd8da7213ee74cf474f2a9..06b485635358b64000d78d92a238724250809175:/src/gr/ebs/gss/client/FileMenu.java
diff --git a/src/gr/ebs/gss/client/FileMenu.java b/src/gr/ebs/gss/client/FileMenu.java
index 23aa254..e6af528 100644
--- a/src/gr/ebs/gss/client/FileMenu.java
+++ b/src/gr/ebs/gss/client/FileMenu.java
@@ -27,19 +27,23 @@ import gr.ebs.gss.client.rest.RestCommand;
import gr.ebs.gss.client.rest.resource.FileResource;
import gr.ebs.gss.client.rest.resource.GroupUserResource;
+import java.util.List;
+
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.http.client.URL;
+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.ui.AbstractImagePrototype;
-import com.google.gwt.user.client.ui.ClickListener;
import com.google.gwt.user.client.ui.MenuBar;
import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.TreeItem;
-import com.google.gwt.user.client.ui.Widget;
/**
* The 'File' menu implementation.
*/
-public class FileMenu extends PopupPanel implements ClickListener {
+public class FileMenu extends PopupPanel implements ClickHandler {
/**
* The widget's images.
@@ -49,28 +53,28 @@ public class FileMenu extends PopupPanel implements ClickListener {
/**
* An image bundle for this widgets images.
*/
- public interface Images extends FilePropertiesDialog.Images {
+ public interface Images extends ClientBundle,FilePropertiesDialog.Images {
- @Resource("gr/ebs/gss/resources/folder_new.png")
- AbstractImagePrototype folderNew();
+ @Source("gr/ebs/gss/resources/folder_new.png")
+ ImageResource folderNew();
- @Resource("gr/ebs/gss/resources/folder_outbox.png")
- AbstractImagePrototype fileUpdate();
+ @Source("gr/ebs/gss/resources/folder_outbox.png")
+ ImageResource fileUpdate();
- @Resource("gr/ebs/gss/resources/view_text.png")
- AbstractImagePrototype viewText();
+ @Source("gr/ebs/gss/resources/view_text.png")
+ ImageResource viewText();
- @Resource("gr/ebs/gss/resources/folder_inbox.png")
- AbstractImagePrototype download();
+ @Source("gr/ebs/gss/resources/folder_inbox.png")
+ ImageResource download();
- @Resource("gr/ebs/gss/resources/trashcan_empty.png")
- AbstractImagePrototype emptyTrash();
+ @Source("gr/ebs/gss/resources/trashcan_empty.png")
+ ImageResource emptyTrash();
- @Resource("gr/ebs/gss/resources/internet.png")
- AbstractImagePrototype sharing();
+ @Source("gr/ebs/gss/resources/internet.png")
+ ImageResource sharing();
- @Resource("gr/ebs/gss/resources/refresh.png")
- AbstractImagePrototype refresh();
+ @Source("gr/ebs/gss/resources/refresh.png")
+ ImageResource refresh();
}
final MenuBar contextMenu = new MenuBar(true);
@@ -90,15 +94,17 @@ public class FileMenu extends PopupPanel implements ClickListener {
}
- public void onClick(final Widget sender) {
+ @Override
+ public void onClick(ClickEvent event) {
final FileMenu menu = new FileMenu(images);
- final int left = sender.getAbsoluteLeft();
- final int top = sender.getAbsoluteTop() + sender.getOffsetHeight();
+ final int left = event.getRelativeElement().getAbsoluteLeft();
+ final int top = event.getRelativeElement().getAbsoluteTop() + event.getRelativeElement().getOffsetHeight();
menu.setPopupPosition(left, top);
-
menu.show();
+
}
+
/**
* Do some validation before downloading a file.
*/
@@ -117,18 +123,37 @@ public class FileMenu extends PopupPanel implements ClickListener {
* @param link a String array with two elements that is modified so that the
* first position contains the opening tag and the second one the
* closing tag
+ * @param forceDownload If true, link will be such that browser should ask for filename
+ * and save location
*/
- void createDownloadLink(String[] link) {
+ void createDownloadLink(String[] link, boolean forceDownload) {
+ String downloadURL = getDownloadURL();
+ if (!downloadURL.isEmpty()) {
+ link[0] = "";
+ link[1] = "";
+ }
+ }
+
+ public String getDownloadURL() {
GSS app = GSS.get();
Object selection = app.getCurrentSelection();
if (selection != null && selection instanceof FileResource) {
FileResource file = (FileResource) selection;
+ return getDownloadURL(file);
+ }
+ return "";
+ }
+
+ public String getDownloadURL(FileResource file) {
+ GSS app = GSS.get();
+ if (file != null) {
String dateString = RestCommand.getDate();
String resource = file.getUri().substring(app.getApiPath().length()-1,file.getUri().length());
String sig = app.getCurrentUserResource().getUsername()+" "+RestCommand.calculateSig("GET", dateString, resource, RestCommand.base64decode(app.getToken()));
- link[0] = "";
- link[1] = "";
+ return file.getUri() + "?Authorization=" + URL.encodeComponent(sig) + "&Date="+URL.encodeComponent(dateString);
}
+ return "";
}
public MenuBar createMenu() {
@@ -144,21 +169,27 @@ public class FileMenu extends PopupPanel implements ClickListener {
Folders folders = GSS.get().getFolders();
TreeItem selectedItem = folders.getCurrent();
boolean downloadVisible = GSS.get().getCurrentSelection() != null && GSS.get().getCurrentSelection() instanceof FileResource;
- boolean propertiesNotVisible = selectedItem != null && (folders.isTrash(selectedItem) || folders.isMyShares(selectedItem) || folders.isOthersShared(selectedItem) || selectedItem.getUserObject() instanceof GroupUserResource);
- contextMenu.addItem("" + images.folderNew().getHTML() + " New Folder", true, new NewFolderCommand(this, images));
- contextMenu.addItem("" + images.fileUpdate().getHTML() + " Upload", true, new UploadFileCommand(this, images));
+ boolean propertiesVisible = !(selectedItem != null && (folders.isTrash(selectedItem) || folders.isMyShares(selectedItem) || folders.isOthersShared(selectedItem) || selectedItem.getUserObject() instanceof GroupUserResource || GSS.get().getCurrentSelection() instanceof List));
+ boolean newFolderVisible = !(selectedItem != null && (folders.isTrash(selectedItem) || folders.isMyShares(selectedItem)|| folders.isOthersShared(selectedItem)));
+ if(newFolderVisible)
+ contextMenu.addItem("" + AbstractImagePrototype.create(images.folderNew()).getHTML() + " New Folder", true, new NewFolderCommand(this, images));
+ contextMenu.addItem("" + AbstractImagePrototype.create(images.fileUpdate()).getHTML() + " Upload", true, new UploadFileCommand(this));
if (downloadVisible) {
String[] link = {"", ""};
- createDownloadLink(link);
- contextMenu.addItem("" + link[0] + images.download().getHTML() + " Download" + link[1] + "", true, downloadCmd);
+ createDownloadLink(link, false);
+ contextMenu.addItem("" + link[0] + AbstractImagePrototype.create(images.download()).getHTML() + " Download" + link[1] + "", true, downloadCmd);
+ createDownloadLink(link, true);
+ contextMenu.addItem("" + link[0] + AbstractImagePrototype.create(images.download()).getHTML() + " Save As" + link[1] + "", true, downloadCmd);
}
- contextMenu.addItem("" + images.emptyTrash().getHTML() + " Empty Trash", true, new EmptyTrashCommand(this));
- contextMenu.addItem("" + images.refresh().getHTML() + " Refresh", true, new RefreshCommand(this, images));
- contextMenu.addItem("" + images.sharing().getHTML() + " Sharing", true, new PropertiesCommand(this, images, 1))
- .setVisible(!propertiesNotVisible);
- contextMenu.addItem("" + images.viewText().getHTML() + " Properties", true, new PropertiesCommand(this, images, 0))
- .setVisible(!propertiesNotVisible);
+ contextMenu.addItem("" + AbstractImagePrototype.create(images.emptyTrash()).getHTML() + " Empty Trash", true, new EmptyTrashCommand(this));
+ contextMenu.addItem("" + AbstractImagePrototype.create(images.refresh()).getHTML() + " Refresh", true, new RefreshCommand(this, images));
+ contextMenu.addItem("" + AbstractImagePrototype.create(images.sharing()).getHTML() + " Sharing", true, new PropertiesCommand(this, images, 1))
+ .setVisible(propertiesVisible);
+ contextMenu.addItem("" + AbstractImagePrototype.create(images.viewText()).getHTML() + " Properties", true, new PropertiesCommand(this, images, 0))
+ .setVisible(propertiesVisible);
return contextMenu;
}
+
+
}