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 gr.grnet.pithos.web.client.tagtree.Tag;
import java.util.ArrayList;
import java.util.HashMap;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.Scheduler;
+import com.google.gwt.core.client.Scheduler.RepeatingCommand;
import com.google.gwt.core.client.Scheduler.ScheduledCommand;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.http.client.RequestException;
import com.google.gwt.http.client.Response;
import com.google.gwt.http.client.URL;
+import com.google.gwt.i18n.client.Dictionary;
import com.google.gwt.i18n.client.NumberFormat;
import com.google.gwt.json.client.JSONArray;
import com.google.gwt.json.client.JSONObject;
return account;
}
- public void updateFolder(Folder f, boolean showfiles, Command callback) {
- folderTreeView.updateFolder(f, showfiles, callback);
+ public void updateFolder(Folder f, boolean showfiles, Command callback, final boolean openParent) {
+ folderTreeView.updateFolder(f, showfiles, callback, openParent);
}
public void updateGroupNode(Group group) {
otherSharedTreeView.updateFolder(f, showfiles);
}
- public List<Tag> getAllTags() {
- List<Tag> tagList = new ArrayList<Tag>();
- for (Folder f : account.getContainers()) {
- for (String t : f.getTags()) {
- tagList.add(new Tag(t));
- }
- }
- return tagList;
- }
-
public MysharedTreeView getMySharedTreeView() {
return mysharedTreeView;
}
private Toolbar toolbar;
+ private FileUploadDialog fileUploadDialog;
+
@Override
public void onModuleLoad() {
if (parseUserCredentials())
header.setWidth(contentWidth);
if (bareContent)
header.addStyleName("pithos-header-noframe");
- upload = new Button("Upload File", new ClickHandler() {
+ upload = new Button("Upload", new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
if (getSelection() != null)
public void execute() {
updateStatistics();
}
- });
+ }, true);
+ showRelevantToolbarButtons();
}
- showRelevantToolbarButtons();
+ else {
+ if (getSelectedTree().equals(folderTreeView))
+ setSelectedTree(null);
+ if (getSelectedTree() == null)
+ showRelevantToolbarButtons();
+ }
}
});
selectionModels.add(folderTreeSelectionModel);
}
});
-// Scheduler.get().scheduleDeferred(new Command() {
-//
-// @Override
-// public void execute() {
-// displayError("lalala");
-//
-// }
-// });
+ Scheduler.get().scheduleFixedDelay(new RepeatingCommand() {
+
+ @Override
+ public boolean execute() {
+ Folder f = getSelection();
+ if (f != null) {
+ if (getSelectedTree().equals(folderTreeView))
+ updateFolder(f, true, null, false);
+ else if (getSelectedTree().equals(mysharedTreeView))
+ updateSharedFolder(f, true);
+ }
+ return true;
+ }
+ }, 3000);
}
public void applyPermissions(Folder f) {
c.removeStyleName("cellTreeWidget-selectedTree");
for (SingleSelectionModel s : selectionModels)
- if (!s.equals(model))
+ if (!s.equals(model) && s.getSelectedObject() != null)
s.setSelected(s.getSelectedObject(), false);
}
fileList.setFiles(new ArrayList<File>(files));
}
- protected void fetchFile(final Iterator<File> iter, final Set<File> files) {
- if (iter.hasNext()) {
- File file = iter.next();
- String path = file.getUri() + "?format=json";
- GetRequest<File> getFile = new GetRequest<File>(File.class, getApiPath(), username, path, file) {
- @Override
- public void onSuccess(File _result) {
- fetchFile(iter, files);
- }
-
- @Override
- public void onError(Throwable t) {
- GWT.log("Error getting file", t);
- setError(t);
- if (t instanceof RestException)
- displayError("Error getting file: " + ((RestException) t).getHttpStatusText());
- else
- displayError("System error fetching file: " + t.getMessage());
- }
-
- @Override
- protected void onUnauthorized(Response response) {
- sessionExpired();
- }
- };
- getFile.setHeader("X-Auth-Token", "0000");
- Scheduler.get().scheduleDeferred(getFile);
- }
- else
- fileList.setFiles(new ArrayList<File>(files));
- }
-
/**
* Parse and store the user credentials to the appropriate fields.
*/
username = Window.Location.getParameter("user");
token = Window.Location.getParameter("token");
Configuration conf = (Configuration) GWT.create(Configuration.class);
+ Dictionary otherProperties = Dictionary.getDictionary("otherProperties");
if (username == null || username.length() == 0 || token == null || token.length() == 0) {
- String cookie = conf.authCookie();
+ String cookie = otherProperties.get("authCookie");
String auth = Cookies.getCookie(cookie);
if (auth == null) {
authenticateUser();
}
username = authSplit[0];
token = authSplit[1];
- return true;
}
-
- Cookies.setCookie(conf.authCookie(), username + conf.cookieSeparator() + token, null, "", "/", false);
+ else
+ Cookies.setCookie(otherProperties.get("authCookie"), username + conf.cookieSeparator() + token, null, "", "/", false);
+
+ String gotoUrl = Window.Location.getParameter("goto");
+ if (gotoUrl != null && gotoUrl.length() > 0) {
+ Window.Location.assign(gotoUrl);
+ return false;
+ }
return true;
}
* Redirect the user to the login page for authentication.
*/
protected void authenticateUser() {
- Window.Location.assign(config.loginUrl());
+ Dictionary otherProperties = Dictionary.getDictionary("otherProperties");
+ Window.Location.assign(otherProperties.get("loginUrl") + Window.Location.getHref());
}
protected void fetchAccount(final Command callback) {
History.newItem(key);
}
- public void deleteFolder(final Folder folder) {
+ public void deleteFolder(final Folder folder, final Command callback) {
String path = getApiPath() + folder.getOwner() + "/" + folder.getContainer() + "?format=json&delimiter=/&prefix=" + URL.encodeQueryString(folder.getPrefix()) + "&t=" + System.currentTimeMillis();
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, path);
builder.setHeader("X-Auth-Token", getToken());
JSONArray array = json.isArray();
int i = 0;
if (array != null) {
- deleteObject(folder, i, array);
+ deleteObject(folder, i, array, callback);
}
}
}
}
}
- void deleteObject(final Folder folder, final int i, final JSONArray array) {
+ void deleteObject(final Folder folder, final int i, final JSONArray array, final Command callback) {
if (i < array.size()) {
JSONObject o = array.get(i).isObject();
if (o != null && !o.containsKey("subdir")) {
DeleteRequest delete = new DeleteRequest(getApiPath(), folder.getOwner(), URL.encode(path)) {
@Override
public void onSuccess(Resource result) {
- deleteObject(folder, i + 1, array);
+ deleteObject(folder, i + 1, array, callback);
}
@Override
array.set(l++, array2.get(j));
}
}
- deleteObject(folder, i + 1, array);
+ deleteObject(folder, i + 1, array, callback);
}
}
@Override
public void execute() {
+ folderTreeSelectionModel.setSelected(folder.getParent(), true);
updateStatistics();
+ if (callback != null)
+ callback.execute();
}
- });
+ }, true);
}
@Override
}
public void updateTrash(boolean showFiles, Command callback) {
- updateFolder(trash, showFiles, callback);
+ updateFolder(trash, showFiles, callback, true);
}
public void updateGroupsNode() {
return selectedTree;
}
+ public void setSelectedTree(TreeView selected) {
+ selectedTree = selected;
+ }
+
public Folder getSelection() {
return selectedTree.getSelection();
}
}
public void updateRootFolder(Command callback) {
- updateFolder(account.getPithos(), false, callback);
+ updateFolder(account.getPithos(), false, callback, true);
}
void createMySharedTree() {
deselectOthers(mysharedTreeView, mysharedTreeSelectionModel);
upload.setEnabled(false);
updateSharedFolder(mysharedTreeSelectionModel.getSelectedObject(), true);
+ showRelevantToolbarButtons();
}
- showRelevantToolbarButtons();
+ else {
+ if (getSelectedTree().equals(mysharedTreeView))
+ setSelectedTree(null);
+ if (getSelectedTree() == null)
+ showRelevantToolbarButtons();
+ }
}
});
selectionModels.add(mysharedTreeSelectionModel);
otherSharedTreeView.addStyleName("cellTreeWidget-selectedTree");
applyPermissions(otherSharedTreeSelectionModel.getSelectedObject());
updateOtherSharedFolder(otherSharedTreeSelectionModel.getSelectedObject(), true);
+ showRelevantToolbarButtons();
}
- showRelevantToolbarButtons();
+ else {
+ if (getSelectedTree().equals(otherSharedTreeView))
+ setSelectedTree(null);
+ if (getSelectedTree() == null)
+ showRelevantToolbarButtons();
+ }
}
});
selectionModels.add(otherSharedTreeSelectionModel);
@Override
public void execute() {
otherSharedTreeView = new OtherSharedTreeView(otherSharedTreeViewModel);
- trees.insert(otherSharedTreeView, 3);
+ trees.insert(otherSharedTreeView, 2);
treeViews.add(otherSharedTreeView);
}
});
}
- public void logoff() {
- Cookies.removeCookie(config.authCookie(), "/");
- Cookies.removeCookie(config.authTokenCookie(), "/");
- for (String s: Cookies.getCookieNames())
- if (s.startsWith(config.shibSessionCookiePrefix()))
- Cookies.removeCookie(s, "/");
- Window.Location.assign(config.logoutUrl());
- }
-
public native void log1(String message)/*-{
$wnd.console.log(message);
}-*/;
public void showRelevantToolbarButtons() {
toolbar.showRelevantButtons();
}
+
+ public FileUploadDialog getFileUploadDialog() {
+ if (fileUploadDialog == null)
+ fileUploadDialog = new FileUploadDialog(this);
+ return fileUploadDialog;
+ }
+
+ public void hideUploadIndicator() {
+ upload.removeStyleName("pithos-uploadButton-loading");
+ upload.setTitle("");
+ }
+
+ public void showUploadIndicator() {
+ upload.addStyleName("pithos-uploadButton-loading");
+ upload.setTitle("Upload in progress. Click for details.");
+ }
+
+ public void scheduleFolderHeadCommand(final Folder folder, final Command callback) {
+ if (folder == null) {
+ if (callback != null)
+ callback.execute();
+ }
+ else {
+ 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);
+ }
}