import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.user.cellview.client.CellTable;
import com.google.gwt.user.cellview.client.Column;
+import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.Window;
vp.setCellWidth(celltable, "100%");
vp.addHandler(new ContextMenuHandler() {
@Override
- public void onContextMenu(ContextMenuEvent event) {
- TreeView tree = app.getSelectedTree();
+ public void onContextMenu(final ContextMenuEvent event) {
+ final TreeView tree = app.getSelectedTree();
if (tree != null && (tree.equals(app.getFolderTreeView()) || tree.equals(app.getOtherSharedTreeView()))) {
- Folder selectedFolder = app.getSelection();
- FileContextMenu contextMenu = new FileContextMenu(app, images, tree, selectedFolder, getSelectedFiles());
- int x = event.getNativeEvent().getClientX();
- int y = event.getNativeEvent().getClientY();
- contextMenu.setPopupPosition(x, y);
- contextMenu.show();
+ final int x = event.getNativeEvent().getClientX();
+ final int y = event.getNativeEvent().getClientY();
+ final Folder selectedFolder = app.getSelection();
+ app.scheduleFolderHeadCommand(selectedFolder, new Command() {
+
+ @Override
+ public void execute() {
+ final List<File> selectedFiles = getSelectedFiles();
+ Iterator<File> iter = selectedFiles.iterator();
+ iterateFilesHeadCommand(iter, new Command() {
+
+ @Override
+ public void execute() {
+ FileContextMenu contextMenu = new FileContextMenu(app, images, tree, selectedFolder, selectedFiles);
+ contextMenu.setPopupPosition(x, y);
+ contextMenu.show();
+ }
+ });
+ }
+ });
}
}
}, ContextMenuEvent.getType());
//celltable.redraw();
celltable.redrawHeaders();
}
+
+ void iterateFilesHeadCommand(final Iterator<File> iter, final Command callback) {
+ if (iter.hasNext()) {
+ File f = iter.next();
+ app.scheduleFileHeadCommand(f, new Command() {
+
+ @Override
+ public void execute() {
+ iterateFilesHeadCommand(iter, callback);
+ }
+ });
+ }
+ else if (callback != null)
+ callback.execute();
+ }
}
upload.addStyleName("pithos-uploadButton-loading");
upload.setTitle("Upload in progress. Click for details.");
}
+
+ public void scheduleFolderHeadCommand(final Folder folder, final Command callback) {
+ HeadRequest<Folder> headFolder = new HeadRequest<Folder>(Folder.class, getApiPath(), folder.getOwner(), folder.getUri(), folder) {
+
+ @Override
+ public void onSuccess(Folder _result) {
+ if (callback != null)
+ callback.execute();
+ }
+
+ @Override
+ public void onError(Throwable t) {
+ if (t instanceof RestException) {
+ if (((RestException) t).getHttpStatusCode() == Response.SC_NOT_FOUND) {
+ final String path = folder.getUri();
+ PutRequest newFolder = new PutRequest(getApiPath(), folder.getOwner(), path) {
+ @Override
+ public void onSuccess(Resource _result) {
+ scheduleFolderHeadCommand(folder, callback);
+ }
+
+ @Override
+ public void onError(Throwable _t) {
+ GWT.log("", _t);
+ setError(_t);
+ if(_t instanceof RestException){
+ displayError("Unable to create folder: " + ((RestException) _t).getHttpStatusText());
+ }
+ else
+ displayError("System error creating folder: " + _t.getMessage());
+ }
+
+ @Override
+ protected void onUnauthorized(Response response) {
+ sessionExpired();
+ }
+ };
+ newFolder.setHeader("X-Auth-Token", getToken());
+ newFolder.setHeader("Content-Type", "application/folder");
+ newFolder.setHeader("Accept", "*/*");
+ newFolder.setHeader("Content-Length", "0");
+ Scheduler.get().scheduleDeferred(newFolder);
+ }
+ else
+ displayError("Error heading folder: " + ((RestException) t).getHttpStatusText());
+ }
+ else
+ displayError("System error heading folder: " + t.getMessage());
+
+ GWT.log("Error heading folder", t);
+ setError(t);
+ }
+
+ @Override
+ protected void onUnauthorized(Response response) {
+ sessionExpired();
+ }
+ };
+ headFolder.setHeader("X-Auth-Token", getToken());
+ Scheduler.get().scheduleDeferred(headFolder);
+ }
+
+ public void scheduleFileHeadCommand(File f, final Command callback) {
+ HeadRequest<File> headFile = new HeadRequest<File>(File.class, getApiPath(), f.getOwner(), f.getUri(), f) {
+
+ @Override
+ public void onSuccess(File _result) {
+ if (callback != null)
+ callback.execute();
+ }
+
+ @Override
+ public void onError(Throwable t) {
+ GWT.log("Error heading file", t);
+ setError(t);
+ if (t instanceof RestException)
+ displayError("Error heading file: " + ((RestException) t).getHttpStatusText());
+ else
+ displayError("System error heading file: " + t.getMessage());
+ }
+
+ @Override
+ protected void onUnauthorized(Response response) {
+ sessionExpired();
+ }
+ };
+ headFile.setHeader("X-Auth-Token", getToken());
+ Scheduler.get().scheduleDeferred(headFile);
+ }
}
Pithos app;
- private Anchor newFolderButton;
+ Anchor newFolderButton;
- private Anchor shareFolderButton;
+ Anchor shareFolderButton;
- private Anchor refreshButton;
+ Anchor refreshButton;
private Anchor toolsButton;
}
public void showRelevantButtons() {
- Folder folder = app.getSelectedTree().getSelection();
+ final Folder folder = app.getSelectedTree().getSelection();
if (folder != null) {
- Boolean[] permissions = folder.getPermissions().get(app.getUsername());
- boolean canWrite = folder.getOwner().equals(app.getUsername()) || (permissions!= null && permissions[1] != null && permissions[1]);
- boolean isFolderTreeSelected = app.getSelectedTree().equals(app.getFolderTreeView());
- boolean otherSharedTreeSelected = app.getSelectedTree().equals(app.getOtherSharedTreeView());
-
- if (isFolderTreeSelected || otherSharedTreeSelected)
- refreshButton.setVisible(true);
- else
- refreshButton.setVisible(true);
-
- if (!folder.isInTrash() && canWrite) {
- if (isFolderTreeSelected || otherSharedTreeSelected)
- newFolderButton.setVisible(true);
- if (isFolderTreeSelected && !folder.isContainer())
- shareFolderButton.setVisible(true);
- else
- shareFolderButton.setVisible(false);
- }
- else {
- newFolderButton.setVisible(false);
- shareFolderButton.setVisible(false);
- }
+ app.scheduleFolderHeadCommand(folder, new Command() {
+
+ @Override
+ public void execute() {
+ Boolean[] permissions = folder.getPermissions().get(app.getUsername());
+ boolean canWrite = folder.getOwner().equals(app.getUsername()) || (permissions!= null && permissions[1] != null && permissions[1]);
+ boolean isFolderTreeSelected = app.getSelectedTree().equals(app.getFolderTreeView());
+ boolean otherSharedTreeSelected = app.getSelectedTree().equals(app.getOtherSharedTreeView());
+
+ if (isFolderTreeSelected || otherSharedTreeSelected)
+ refreshButton.setVisible(true);
+ else
+ refreshButton.setVisible(true);
+
+ if (!folder.isInTrash() && canWrite) {
+ if (isFolderTreeSelected || otherSharedTreeSelected)
+ newFolderButton.setVisible(true);
+ if (isFolderTreeSelected && !folder.isContainer())
+ shareFolderButton.setVisible(true);
+ else
+ shareFolderButton.setVisible(false);
+ }
+ else {
+ newFolderButton.setVisible(false);
+ shareFolderButton.setVisible(false);
+ }
+ }
+ });
}
else {
newFolderButton.setVisible(false);
import gr.grnet.pithos.web.client.Pithos;
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.HeadRequest;
-import gr.grnet.pithos.web.client.rest.PutRequest;
-import gr.grnet.pithos.web.client.rest.RestException;
import java.util.List;
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.core.client.Scheduler;
-import com.google.gwt.http.client.Response;
import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.ui.PopupPanel;
dlg.center();
break;
case PERMISSIONS:
- scheduleFolderHeadCommand(folder, new Command() {
+ app.scheduleFolderHeadCommand(folder, new Command() {
@Override
public void execute() {
final File f = files.get(0);
switch (tabToShow) {
case PROPERTIES:
- scheduleFileHeadCommand(f, new Command() {
+ app.scheduleFileHeadCommand(f, new Command() {
@Override
public void execute() {
});
break;
case PERMISSIONS:
- scheduleFileHeadCommand(f, new Command() {
+ app.scheduleFileHeadCommand(f, new Command() {
@Override
public void execute() {
}
}
}
-
- private void scheduleFileHeadCommand(File f, final Command callback) {
- HeadRequest<File> headFile = new HeadRequest<File>(File.class, app.getApiPath(), f.getOwner(), f.getUri(), f) {
-
- @Override
- public void onSuccess(File _result) {
- if (callback != null)
- callback.execute();
- }
-
- @Override
- public void onError(Throwable t) {
- GWT.log("Error heading file", t);
- app.setError(t);
- if (t instanceof RestException)
- app.displayError("Error heading file: " + ((RestException) t).getHttpStatusText());
- else
- app.displayError("System error heading file: " + t.getMessage());
- }
-
- @Override
- protected void onUnauthorized(Response response) {
- app.sessionExpired();
- }
- };
- headFile.setHeader("X-Auth-Token", app.getToken());
- Scheduler.get().scheduleDeferred(headFile);
- }
-
- void scheduleFolderHeadCommand(final Folder folder, final Command callback) {
- HeadRequest<Folder> headFolder = new HeadRequest<Folder>(Folder.class, app.getApiPath(), folder.getOwner(), folder.getUri(), folder) {
-
- @Override
- public void onSuccess(Folder _result) {
- if (callback != null)
- callback.execute();
- }
-
- @Override
- public void onError(Throwable t) {
- if (t instanceof RestException) {
- if (((RestException) t).getHttpStatusCode() == Response.SC_NOT_FOUND) {
- final String path = folder.getUri();
- PutRequest newFolder = new PutRequest(app.getApiPath(), folder.getOwner(), path) {
- @Override
- public void onSuccess(Resource _result) {
- scheduleFolderHeadCommand(folder, callback);
- }
-
- @Override
- public void onError(Throwable _t) {
- GWT.log("", _t);
- app.setError(_t);
- if(_t instanceof RestException){
- app.displayError("Unable to create folder: " + ((RestException) _t).getHttpStatusText());
- }
- else
- app.displayError("System error creating folder: " + _t.getMessage());
- }
-
- @Override
- protected void onUnauthorized(Response response) {
- app.sessionExpired();
- }
- };
- 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);
- }
- else
- app.displayError("Error heading folder: " + ((RestException) t).getHttpStatusText());
- }
- else
- app.displayError("System error heading folder: " + t.getMessage());
-
- GWT.log("Error heading folder", t);
- app.setError(t);
- }
-
- @Override
- protected void onUnauthorized(Response response) {
- app.sessionExpired();
- }
- };
- headFolder.setHeader("X-Auth-Token", app.getToken());
- Scheduler.get().scheduleDeferred(headFolder);
- }
}
}
@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<Folder> valueUpdater) {
+ public void onBrowserEvent(Cell.Context context, com.google.gwt.dom.client.Element parent, final Folder folder, com.google.gwt.dom.client.NativeEvent event, com.google.gwt.cell.client.ValueUpdater<Folder> valueUpdater) {
if (event.getType().equals(ContextMenuEvent.getType().getName())) {
+ final int x = event.getClientX();
+ final int y = event.getClientY();
FolderTreeViewModel.this.selectionModel.setSelected(folder, true);
- FolderContextMenu menu = new FolderContextMenu(app, FolderTreeView.images, app.getSelectedTree(), folder);
- menu.setPopupPosition(event.getClientX(), event.getClientY());
- menu.show();
+ app.scheduleFolderHeadCommand(folder, new Command() {
+
+ @Override
+ public void execute() {
+ FolderContextMenu menu = new FolderContextMenu(app, FolderTreeView.images, app.getSelectedTree(), folder);
+ menu.setPopupPosition(x, y);
+ menu.show();
+ }
+ });
}
}
};
import gr.grnet.pithos.web.client.Pithos;
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.mysharedtree.MysharedTreeView.Templates;
import gr.grnet.pithos.web.client.rest.GetRequest;
import gr.grnet.pithos.web.client.rest.RestException;
}
@Override
- public void onBrowserEvent(Context context, com.google.gwt.dom.client.Element parent, Folder folder, com.google.gwt.dom.client.NativeEvent event, ValueUpdater<Folder> valueUpdater) {
+ public void onBrowserEvent(Context context, com.google.gwt.dom.client.Element parent, final Folder folder, com.google.gwt.dom.client.NativeEvent event, ValueUpdater<Folder> valueUpdater) {
if (event.getType().equals(ContextMenuEvent.getType().getName())) {
+ final int x = event.getClientX();
+ final int y = event.getClientY();
MysharedTreeViewModel.this.selectionModel.setSelected(folder, true);
- FolderContextMenu menu = new FolderContextMenu(app, MysharedTreeView.images, app.getSelectedTree(), folder);
- menu.setPopupPosition(event.getClientX(), event.getClientY());
- menu.show();
+ app.scheduleFolderHeadCommand(folder, new Command() {
+
+ @Override
+ public void execute() {
+ FolderContextMenu menu = new FolderContextMenu(app, MysharedTreeView.images, app.getSelectedTree(), folder);
+ menu.setPopupPosition(x, y);
+ menu.show();
+ }
+ });
}
}
};
import gr.grnet.pithos.web.client.foldertree.AccountResource;
import gr.grnet.pithos.web.client.foldertree.File;
import gr.grnet.pithos.web.client.foldertree.Folder;
+import gr.grnet.pithos.web.client.mysharedtree.MysharedTreeView;
import gr.grnet.pithos.web.client.othersharedtree.OtherSharedTreeView.Templates;
import gr.grnet.pithos.web.client.rest.GetRequest;
import gr.grnet.pithos.web.client.rest.RestException;
}
@Override
- public void onBrowserEvent(Context context, com.google.gwt.dom.client.Element parent, Folder folder, com.google.gwt.dom.client.NativeEvent event, ValueUpdater<Folder> valueUpdater) {
+ public void onBrowserEvent(Context context, com.google.gwt.dom.client.Element parent, final Folder folder, com.google.gwt.dom.client.NativeEvent event, ValueUpdater<Folder> valueUpdater) {
if (event.getType().equals(ContextMenuEvent.getType().getName())) {
+ final int x = event.getClientX();
+ final int y = event.getClientY();
OtherSharedTreeViewModel.this.selectionModel.setSelected(folder, true);
- FolderContextMenu menu = new FolderContextMenu(app, OtherSharedTreeView.images, app.getSelectedTree(), folder);
- menu.setPopupPosition(event.getClientX(), event.getClientY());
- menu.show();
+ app.scheduleFolderHeadCommand(folder, new Command() {
+
+ @Override
+ public void execute() {
+ FolderContextMenu menu = new FolderContextMenu(app, OtherSharedTreeView.images, app.getSelectedTree(), folder);
+ menu.setPopupPosition(x, y);
+ menu.show();
+ }
+ });
}
}
};