X-Git-Url: https://code.grnet.gr/git/pithos/blobdiff_plain/fe79d412a34f041bd808536f8e2a1c9c2ccae34c..603e82ce71e54fa0e7d5f66cdda073ec5f1c8de5:/web_client/src/gr/grnet/pithos/web/client/Pithos.java diff --git a/web_client/src/gr/grnet/pithos/web/client/Pithos.java b/web_client/src/gr/grnet/pithos/web/client/Pithos.java index bdfea0b..24a39b6 100644 --- a/web_client/src/gr/grnet/pithos/web/client/Pithos.java +++ b/web_client/src/gr/grnet/pithos/web/client/Pithos.java @@ -76,6 +76,7 @@ import com.google.gwt.http.client.RequestBuilder; import com.google.gwt.http.client.RequestCallback; 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.json.client.JSONArray; import com.google.gwt.json.client.JSONObject; import com.google.gwt.json.client.JSONParser; @@ -94,7 +95,6 @@ import com.google.gwt.user.client.ui.HasHorizontalAlignment; import com.google.gwt.user.client.ui.HasVerticalAlignment; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.HorizontalSplitPanel; -import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.view.client.SelectionChangeEvent; @@ -144,14 +144,6 @@ public class Pithos implements EntryPoint, ResizeHandler { otherSharedTreeView.updateFolder(f, showfiles); } - public void updateTag(Tag t) { - tagTreeView.updateTag(t); - } - - public void updateTags() { - tagTreeViewModel.initialize(getAllTags()); - } - public List getAllTags() { List tagList = new ArrayList(); for (Folder f : account.getContainers()) { @@ -175,9 +167,6 @@ public class Pithos implements EntryPoint, ResizeHandler { @Source("gr/grnet/pithos/resources/document.png") ImageResource folders(); - @Source("gr/grnet/pithos/resources/edit_group_22.png") - ImageResource groups(); - @Source("gr/grnet/pithos/resources/advancedsettings.png") ImageResource tools(); } @@ -233,21 +222,19 @@ public class Pithos implements EntryPoint, ResizeHandler { */ private String token; + VerticalPanel trees; + SingleSelectionModel folderTreeSelectionModel; FolderTreeViewModel folderTreeViewModel; FolderTreeView folderTreeView; SingleSelectionModel mysharedTreeSelectionModel; - private MysharedTreeViewModel mysharedTreeViewModel; - MysharedTreeView mysharedTreeView; + MysharedTreeViewModel mysharedTreeViewModel; + MysharedTreeView mysharedTreeView = null;; protected SingleSelectionModel otherSharedTreeSelectionModel; - private OtherSharedTreeViewModel otherSharedTreeViewModel; - OtherSharedTreeView otherSharedTreeView; - - protected SingleSelectionModel tagTreeSelectionModel; - private TagTreeViewModel tagTreeViewModel; - private TagTreeView tagTreeView; + OtherSharedTreeViewModel otherSharedTreeViewModel; + OtherSharedTreeView otherSharedTreeView = null; GroupTreeViewModel groupTreeViewModel; private GroupTreeView groupTreeView; @@ -257,8 +244,7 @@ public class Pithos implements EntryPoint, ResizeHandler { Folder trash; - @SuppressWarnings("rawtypes") - private List selectionModels = new ArrayList(); + @SuppressWarnings("rawtypes") List selectionModels = new ArrayList(); Button upload; @@ -350,40 +336,10 @@ public class Pithos implements EntryPoint, ResizeHandler { fileList = new FileList(this, images, folderTreeView); inner.add(fileList); - mysharedTreeSelectionModel = new SingleSelectionModel(); - mysharedTreeSelectionModel.addSelectionChangeHandler(new Handler() { - @Override - public void onSelectionChange(@SuppressWarnings("unused") SelectionChangeEvent event) { - if (mysharedTreeSelectionModel.getSelectedObject() != null) { - deselectOthers(mysharedTreeView, mysharedTreeSelectionModel); - upload.setEnabled(false); - updateSharedFolder(mysharedTreeSelectionModel.getSelectedObject(), true); - } - } - }); - selectionModels.add(mysharedTreeSelectionModel); - mysharedTreeViewModel = new MysharedTreeViewModel(this, mysharedTreeSelectionModel); - mysharedTreeView = new MysharedTreeView(mysharedTreeViewModel); - - otherSharedTreeSelectionModel = new SingleSelectionModel(); - otherSharedTreeSelectionModel.addSelectionChangeHandler(new Handler() { - @Override - public void onSelectionChange(@SuppressWarnings("unused") SelectionChangeEvent event) { - if (otherSharedTreeSelectionModel.getSelectedObject() != null) { - deselectOthers(otherSharedTreeView, otherSharedTreeSelectionModel); - applyPermissions(otherSharedTreeSelectionModel.getSelectedObject()); - updateOtherSharedFolder(otherSharedTreeSelectionModel.getSelectedObject(), true); - } - } - }); - selectionModels.add(otherSharedTreeSelectionModel); - otherSharedTreeViewModel = new OtherSharedTreeViewModel(this, otherSharedTreeSelectionModel); - otherSharedTreeView = new OtherSharedTreeView(otherSharedTreeViewModel); - groupTreeViewModel = new GroupTreeViewModel(this); groupTreeView = new GroupTreeView(groupTreeViewModel); - VerticalPanel trees = new VerticalPanel(); + trees = new VerticalPanel(); upload = new Button("Upload File", new ClickHandler() { @Override @@ -414,9 +370,6 @@ public class Pithos implements EntryPoint, ResizeHandler { trees.add(treeHeader); trees.add(folderTreeView); - trees.add(mysharedTreeView); - trees.add(otherSharedTreeView); -// trees.add(tagTreeView); trees.add(groupTreeView); // Add the left and right panels to the split panel. splitPanel.setLeftWidget(trees); @@ -468,6 +421,7 @@ public class Pithos implements EntryPoint, ResizeHandler { } folderTreeViewModel.initialize(account); groupTreeViewModel.initialize(); + createMySharedTree(); showStatistics(); } } @@ -530,6 +484,11 @@ public class Pithos implements EntryPoint, ResizeHandler { 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); @@ -592,6 +551,11 @@ public class Pithos implements EntryPoint, ResizeHandler { else displayError("System error fetching user data: " + t.getMessage()); } + + @Override + protected void onUnauthorized(Response response) { + sessionExpired(); + } }; getAccount.setHeader("X-Auth-Token", token); Scheduler.get().scheduleDeferred(getAccount); @@ -613,6 +577,11 @@ public class Pithos implements EntryPoint, ResizeHandler { else displayError("System error fetching user data: " + t.getMessage()); } + + @Override + protected void onUnauthorized(Response response) { + sessionExpired(); + } }; headAccount.setHeader("X-Auth-Token", token); Scheduler.get().scheduleDeferred(headAccount); @@ -644,6 +613,11 @@ public class Pithos implements EntryPoint, ResizeHandler { else displayError("System error Error creating pithos: " + t.getMessage()); } + + @Override + protected void onUnauthorized(Response response) { + sessionExpired(); + } }; createPithos.setHeader("X-Auth-Token", getToken()); Scheduler.get().scheduleDeferred(createPithos); @@ -665,6 +639,11 @@ public class Pithos implements EntryPoint, ResizeHandler { else displayError("System error Error creating pithos: " + t.getMessage()); } + + @Override + protected void onUnauthorized(Response response) { + sessionExpired(); + } }; createPithos.setHeader("X-Auth-Token", getToken()); Scheduler.get().scheduleDeferred(createPithos); @@ -795,9 +774,8 @@ public class Pithos implements EntryPoint, ResizeHandler { } public void deleteFolder(final Folder folder) { - String path = getApiPath() + folder.getOwner() + "/" + folder.getContainer() + "?format=json&delimiter=/&prefix=" + folder.getPrefix(); + 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("If-Modified-Since", "0"); builder.setHeader("X-Auth-Token", getToken()); try { builder.sendRequest("", new RequestCallback() { @@ -840,6 +818,11 @@ public class Pithos implements EntryPoint, ResizeHandler { GWT.log("", t); displayError("System error unable to delete folder: " + t.getMessage()); } + + @Override + protected void onUnauthorized(Response response) { + sessionExpired(); + } }; delete.setHeader("X-Auth-Token", getToken()); Scheduler.get().scheduleDeferred(delete); @@ -847,9 +830,8 @@ public class Pithos implements EntryPoint, ResizeHandler { else if (o != null) { String subdir = o.get("subdir").isString().stringValue(); subdir = subdir.substring(0, subdir.length() - 1); - String path = getApiPath() + getUsername() + "/" + folder.getContainer() + "?format=json&delimiter=/&prefix=" + subdir; + String path = getApiPath() + getUsername() + "/" + folder.getContainer() + "?format=json&delimiter=/&prefix=" + URL.encodeQueryString(subdir) + "&t=" + System.currentTimeMillis(); RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, path); - builder.setHeader("If-Modified-Since", "0"); builder.setHeader("X-Auth-Token", getToken()); try { builder.sendRequest("", new RequestCallback() { @@ -904,6 +886,11 @@ public class Pithos implements EntryPoint, ResizeHandler { else displayError("System error unable to delete folder: " + t.getMessage()); } + + @Override + protected void onUnauthorized(Response response) { + sessionExpired(); + } }; deleteFolder.setHeader("X-Auth-Token", getToken()); Scheduler.get().scheduleDeferred(deleteFolder); @@ -933,9 +920,16 @@ public class Pithos implements EntryPoint, ResizeHandler { else displayError("System error unable to copy file: "+t.getMessage()); } + + @Override + protected void onUnauthorized(Response response) { + sessionExpired(); + } }; copyFile.setHeader("X-Auth-Token", getToken()); copyFile.setHeader("X-Copy-From", file.getUri()); + if (!file.getOwner().equals(targetUsername)) + copyFile.setHeader("X-Source-Account", file.getOwner()); Scheduler.get().scheduleDeferred(copyFile); } else if (callback != null) { @@ -964,7 +958,7 @@ public class Pithos implements EntryPoint, ResizeHandler { PutRequest createFolder = new PutRequest(getApiPath(), targetUsername, path) { @Override public void onSuccess(@SuppressWarnings("unused") Resource result) { - GetRequest getFolder = new GetRequest(Folder.class, getApiPath(), f.getOwner(), "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + f.getPrefix(), f) { + GetRequest getFolder = new GetRequest(Folder.class, getApiPath(), f.getOwner(), "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + URL.encodeQueryString(f.getPrefix()), f) { @Override public void onSuccess(final Folder _f) { @@ -987,6 +981,11 @@ public class Pithos implements EntryPoint, ResizeHandler { else displayError("System error getting folder: " + t.getMessage()); } + + @Override + protected void onUnauthorized(Response response) { + sessionExpired(); + } }; getFolder.setHeader("X-Auth-Token", getToken()); Scheduler.get().scheduleDeferred(getFolder); @@ -1001,6 +1000,11 @@ public class Pithos implements EntryPoint, ResizeHandler { else displayError("System error creating folder: " + t.getMessage()); } + + @Override + protected void onUnauthorized(Response response) { + sessionExpired(); + } }; createFolder.setHeader("X-Auth-Token", getToken()); createFolder.setHeader("Accept", "*/*"); @@ -1051,4 +1055,67 @@ public class Pithos implements EntryPoint, ResizeHandler { public GroupTreeView getGroupTreeView() { return groupTreeView; } + + public void sessionExpired() { + new SessionExpiredDialog(this).center(); + } + + public void updateRootFolder(Command callback) { + updateFolder(account.getPithos(), false, callback); + } + + void createMySharedTree() { + mysharedTreeSelectionModel = new SingleSelectionModel(); + mysharedTreeSelectionModel.addSelectionChangeHandler(new Handler() { + @Override + public void onSelectionChange(@SuppressWarnings("unused") SelectionChangeEvent event) { + if (mysharedTreeSelectionModel.getSelectedObject() != null) { + deselectOthers(mysharedTreeView, mysharedTreeSelectionModel); + upload.setEnabled(false); + updateSharedFolder(mysharedTreeSelectionModel.getSelectedObject(), true); + } + } + }); + selectionModels.add(mysharedTreeSelectionModel); + mysharedTreeViewModel = new MysharedTreeViewModel(Pithos.this, mysharedTreeSelectionModel); + mysharedTreeViewModel.initialize(new Command() { + + @Override + public void execute() { + mysharedTreeView = new MysharedTreeView(mysharedTreeViewModel); + trees.insert(mysharedTreeView, 3); + createOtherSharedTree(); + } + }); + } + + void createOtherSharedTree() { + otherSharedTreeSelectionModel = new SingleSelectionModel(); + otherSharedTreeSelectionModel.addSelectionChangeHandler(new Handler() { + @Override + public void onSelectionChange(@SuppressWarnings("unused") SelectionChangeEvent event) { + if (otherSharedTreeSelectionModel.getSelectedObject() != null) { + deselectOthers(otherSharedTreeView, otherSharedTreeSelectionModel); + applyPermissions(otherSharedTreeSelectionModel.getSelectedObject()); + updateOtherSharedFolder(otherSharedTreeSelectionModel.getSelectedObject(), true); + } + } + }); + selectionModels.add(otherSharedTreeSelectionModel); + otherSharedTreeViewModel = new OtherSharedTreeViewModel(Pithos.this, otherSharedTreeSelectionModel); + otherSharedTreeViewModel.initialize(new Command() { + + @Override + public void execute() { + otherSharedTreeView = new OtherSharedTreeView(otherSharedTreeViewModel); + trees.insert(otherSharedTreeView, 4); + } + }); + } + + public void logoff() { + Configuration conf = (Configuration) GWT.create(Configuration.class); + Cookies.removeCookie(conf.authCookie()); + Window.Location.assign(Window.Location.getHost()); + } }