From 0bc032bf1bbfdfa9114fdfe66dee5fc53f9f5af3 Mon Sep 17 00:00:00 2001 From: Christos Stathis Date: Thu, 30 Jun 2011 18:57:17 +0300 Subject: [PATCH] Got file info from headers --- .../src/gr/grnet/pithos/web/client/FileList.java | 2 -- web_client/src/gr/grnet/pithos/web/client/GSS.java | 38 +++++++++++++++----- .../grnet/pithos/web/client/foldertree/File.java | 32 +++++++++++++++-- .../grnet/pithos/web/client/foldertree/Folder.java | 4 +-- .../pithos/web/client/foldertree/Resource.java | 3 ++ 5 files changed, 64 insertions(+), 15 deletions(-) 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 a2e7bae..c998957 100644 --- a/web_client/src/gr/grnet/pithos/web/client/FileList.java +++ b/web_client/src/gr/grnet/pithos/web/client/FileList.java @@ -638,8 +638,6 @@ public class FileList extends Composite { Folder selectedItem = treeView.getSelection(); provider.setList(files); - provider.refresh(); - celltable.redrawHeaders(); } /** diff --git a/web_client/src/gr/grnet/pithos/web/client/GSS.java b/web_client/src/gr/grnet/pithos/web/client/GSS.java index c3e678d..f6fc3b1 100644 --- a/web_client/src/gr/grnet/pithos/web/client/GSS.java +++ b/web_client/src/gr/grnet/pithos/web/client/GSS.java @@ -5,13 +5,8 @@ package gr.grnet.pithos.web.client; import com.google.gwt.core.client.Scheduler; import com.google.gwt.core.client.Scheduler.ScheduledCommand; -import com.google.gwt.user.client.ui.DockPanel; -import com.google.gwt.user.client.ui.HasVerticalAlignment; -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.NodeInfo; import gr.grnet.pithos.web.client.clipboard.Clipboard; import gr.grnet.pithos.web.client.commands.GetUserCommand; import gr.grnet.pithos.web.client.foldertree.AccountResource; @@ -46,10 +41,8 @@ import com.google.gwt.http.client.URL; import com.google.gwt.i18n.client.DateTimeFormat; 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.Cookies; import com.google.gwt.user.client.DOM; -import com.google.gwt.user.client.DeferredCommand; import com.google.gwt.user.client.Event; import com.google.gwt.user.client.History; import com.google.gwt.user.client.Window; @@ -309,9 +302,36 @@ public class GSS implements EntryPoint, ResizeHandler { } private void showFiles(Folder f) { - Set files = f.getFiles(); - fileList.setFiles(new ArrayList(files)); inner.selectTab(0); + Set files = f.getFiles(); + Iterator iter = files.iterator(); + fetchFile(iter, files); + } + + private void fetchFile(final Iterator iter, final Set files) { + if (iter.hasNext()) { + File file = iter.next(); + String path = getApiPath() + username + "/" + file.getContainer() + "/" + file.getPath() + "?format=json"; + GetRequest getFile = new GetRequest(File.class, path, file) { + @Override + public void onSuccess(File result) { + fetchFile(iter, files); + } + + @Override + public void onError(Throwable t) { + GWT.log("Error getting file", t); + if (t instanceof RestException) + GSS.get().displayError("Error getting file: " + ((RestException) t).getHttpStatusText()); + else + GSS.get().displayError("System error fetching file: " + t.getMessage()); + } + }; + getFile.setHeader("X-Auth-Token", "0000"); + Scheduler.get().scheduleDeferred(getFile); + } + else + fileList.setFiles(new ArrayList(files)); } /** diff --git a/web_client/src/gr/grnet/pithos/web/client/foldertree/File.java b/web_client/src/gr/grnet/pithos/web/client/foldertree/File.java index cfd8049..8118cce 100644 --- a/web_client/src/gr/grnet/pithos/web/client/foldertree/File.java +++ b/web_client/src/gr/grnet/pithos/web/client/foldertree/File.java @@ -4,8 +4,13 @@ package gr.grnet.pithos.web.client.foldertree; +import com.google.gwt.http.client.Response; +import com.google.gwt.i18n.client.DateTimeFormat; +import com.google.gwt.i18n.client.DateTimeFormat.PredefinedFormat; import com.google.gwt.i18n.client.NumberFormat; import com.google.gwt.json.client.JSONObject; +import com.google.gwt.json.client.JSONParser; +import com.google.gwt.json.client.JSONValue; import java.util.Date; public class File extends Resource { @@ -31,6 +36,8 @@ public class File extends Resource { private boolean inTrash; + private String container; + public String getContentType() { return contentType; } @@ -99,8 +106,8 @@ public class File extends Resource { return inTrash; } - public void populate(JSONObject o) { - String path = unmarshallString(o, "name"); + public void populate(JSONObject o, String container) { + path = unmarshallString(o, "name"); if (path.contains("/")) name = path.substring(path.lastIndexOf("/") + 1, path.length()); //strip the prefix else @@ -112,6 +119,7 @@ public class File extends Resource { lastModified = unmarshallDate(o, "last_modified"); modifiedBy = unmarshallString(o, "modified_by"); versionTimestamp = unmarshallDate(o, "version_timestamp"); + this.container = container; } public boolean equals(Object other) { @@ -125,4 +133,24 @@ public class File extends Resource { public int hashCode() { return name.hashCode(); } + + public String getContainer() { + return container; + } + + public static File createFromResponse(Response response, File result) { + result.populate(response); + return result; + } + + private void populate(Response response) { + String header = response.getHeader("X-Object-Meta-Trash"); + if (header != null) + inTrash = Boolean.valueOf(header); + else + inTrash = false; + + JSONValue json = JSONParser.parseStrict(response.getText()); + JSONObject o = json.isObject(); + } } diff --git a/web_client/src/gr/grnet/pithos/web/client/foldertree/Folder.java b/web_client/src/gr/grnet/pithos/web/client/foldertree/Folder.java index e58e894..37b4d53 100644 --- a/web_client/src/gr/grnet/pithos/web/client/foldertree/Folder.java +++ b/web_client/src/gr/grnet/pithos/web/client/foldertree/Folder.java @@ -100,14 +100,14 @@ public class Folder extends Resource { JSONObject o = array.get(i).isObject(); if (o != null) { String contentType = unmarshallString(o, "content_type"); - if (o.containsKey("subdir") || (contentType != null && contentType.startsWith("application/directory"))) { + if (o.containsKey("subdir") || (contentType != null && (contentType.startsWith("application/directory") || contentType.startsWith("application/folder")))) { Folder f = new Folder(); f.populate(o, container); subfolders.add(f); } else { File file = new File(); - file.populate(o); + file.populate(o, container); files.add(file); } } diff --git a/web_client/src/gr/grnet/pithos/web/client/foldertree/Resource.java b/web_client/src/gr/grnet/pithos/web/client/foldertree/Resource.java index 479df02..532cb1c 100644 --- a/web_client/src/gr/grnet/pithos/web/client/foldertree/Resource.java +++ b/web_client/src/gr/grnet/pithos/web/client/foldertree/Resource.java @@ -71,6 +71,9 @@ public abstract class Resource { else if (aClass.equals(Folder.class)) { result = (T) Folder.createFromResponse(response, (Folder) result); } + else if (aClass.equals(File.class)) { + result = (T) File.createFromResponse(response, (File) result); + } return result; } } -- 1.7.10.4