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.i18n.client.DateTimeFormat;
+import com.google.gwt.i18n.client.DateTimeFormat.PredefinedFormat;
import com.google.gwt.json.client.JSONArray;
import com.google.gwt.json.client.JSONObject;
import com.google.gwt.json.client.JSONParser;
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;
@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();
}
}
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() {
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() {
PutRequest createFolder = new PutRequest(getApiPath(), targetUsername, path) {
@Override
public void onSuccess(@SuppressWarnings("unused") Resource result) {
- GetRequest<Folder> getFolder = new GetRequest<Folder>(Folder.class, getApiPath(), f.getOwner(), "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + f.getPrefix(), f) {
+ GetRequest<Folder> getFolder = new GetRequest<Folder>(Folder.class, getApiPath(), f.getOwner(), "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + URL.encodeQueryString(f.getPrefix()), f) {
@Override
public void onSuccess(final Folder _f) {
import gr.grnet.pithos.web.client.foldertree.Resource;
import java.util.ArrayList;
+import java.util.Date;
import java.util.List;
import com.google.gwt.http.client.Response;
public List<String> getUsers() {
return users;
}
+
+ @Override
+ public Date getLastModified() {
+ return null;
+ }
}
this.lastLogin = lastLogin;
}
- public Date getLastModified() {
+ @Override
+ public Date getLastModified() {
return lastModified;
}
return hash;
}
- public Date getLastModified() {
+ @Override
+ public Date getLastModified() {
return lastModified;
}
}
}
}
+
+ @Override
+ public Date getLastModified() {
+ return null;
+ }
}
return name;
}
- public Date getLastModified() {
+ @Override
+ public Date getLastModified() {
return lastModified;
}
import com.google.gwt.cell.client.Cell;
import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.Scheduler;
-import com.google.gwt.core.client.Scheduler.ScheduledCommand;
import com.google.gwt.event.dom.client.ContextMenuEvent;
import com.google.gwt.http.client.Response;
+import com.google.gwt.http.client.URL;
import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.user.client.Command;
if (iter.hasNext()) {
final Folder f = iter.next();
- String path = "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + f.getPrefix();
+ String path = "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + URL.encodeQueryString(f.getPrefix());
GetRequest<Folder> getFolder = new GetRequest<Folder>(Folder.class, app.getApiPath(), f.getOwner(), path, f) {
@Override
public void onSuccess(@SuppressWarnings("unused") Folder _result) {
}
public void fetchFolder(final Folder f, final ListDataProvider<Folder> dataProvider, final boolean showfiles, final Command callback) {
- Scheduler.get().scheduleDeferred(new ScheduledCommand() {
+ String path = "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + URL.encodeQueryString(f.getPrefix());
+ GetRequest<Folder> getFolder = new GetRequest<Folder>(Folder.class, app.getApiPath(), f.getOwner(), path, f) {
@Override
- public void execute() {
- String path = "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + f.getPrefix();
- GetRequest<Folder> getFolder = new GetRequest<Folder>(Folder.class, app.getApiPath(), f.getOwner(), path, f) {
- @Override
- public void onSuccess(final Folder _result) {
- if (showfiles)
- app.showFiles(_result);
- Iterator<Folder> iter = _result.getSubfolders().iterator();
- fetchFolder(iter, new Command() {
- @Override
- public void execute() {
- dataProvider.getList().clear();
- dataProvider.getList().addAll(_result.getSubfolders());
- app.getFolderTreeView().updateChildren(f);
- if (callback != null)
- callback.execute();
- }
- });
- }
-
+ public void onSuccess(final Folder _result) {
+ if (showfiles)
+ app.showFiles(_result);
+ Iterator<Folder> iter = _result.getSubfolders().iterator();
+ fetchFolder(iter, new Command() {
@Override
- public void onError(Throwable t) {
- GWT.log("Error getting folder", t);
- if (t instanceof RestException)
- app.displayError("Error getting folder: " + ((RestException) t).getHttpStatusText());
- else
- app.displayError("System error fetching folder: " + t.getMessage());
+ public void execute() {
+ dataProvider.getList().clear();
+ dataProvider.getList().addAll(_result.getSubfolders());
+ app.getFolderTreeView().updateChildren(f);
+ if (callback != null)
+ callback.execute();
}
+ });
+ }
- @Override
- protected void onUnauthorized(Response response) {
- app.sessionExpired();
- }
- };
- getFolder.setHeader("X-Auth-Token", app.getToken());
- Scheduler.get().scheduleDeferred(getFolder);
+ @Override
+ public void onError(Throwable t) {
+ GWT.log("Error getting folder", t);
+ if (t instanceof RestException)
+ app.displayError("Error getting folder: " + ((RestException) t).getHttpStatusText());
+ else
+ app.displayError("System error fetching folder: " + t.getMessage());
}
- });
+
+ @Override
+ protected void onUnauthorized(Response response) {
+ app.sessionExpired();
+ }
+ };
+ getFolder.setHeader("X-Auth-Token", app.getToken());
+ Scheduler.get().scheduleDeferred(getFolder);
}
}
import java.util.Date;
-public class Resource {
+public abstract class Resource {
protected static String unmarshallString(JSONObject obj, String key){
if(obj.get(key) != null) {
}
return result1;
}
+
+ public abstract Date getLastModified();
}
import gr.grnet.pithos.web.client.Pithos;
import gr.grnet.pithos.web.client.foldertree.File;
-import gr.grnet.pithos.web.client.foldertree.FolderTreeViewModel;
import gr.grnet.pithos.web.client.grouptree.GroupTreeView.Templates;
import java.util.HashMap;
}
@Override
- public void onBrowserEvent(@SuppressWarnings("unused") Cell.Context context, @SuppressWarnings("unused") com.google.gwt.dom.client.Element parent, @SuppressWarnings("unused") String s, com.google.gwt.dom.client.NativeEvent event, @SuppressWarnings("unused") com.google.gwt.cell.client.ValueUpdater<String> valueUpdater) {
+ public void onBrowserEvent(@SuppressWarnings("unused") Cell.Context context, @SuppressWarnings("unused") com.google.gwt.dom.client.Element parent, String s, com.google.gwt.dom.client.NativeEvent event, @SuppressWarnings("unused") com.google.gwt.cell.client.ValueUpdater<String> valueUpdater) {
GroupTreeViewModel.this.rootSelectionModel.setSelected(s, true);
if (event.getType().equals(ContextMenuEvent.getType().getName())) {
GroupContextMenu menu = new GroupContextMenu(app, GroupTreeView.images, null);
import com.google.gwt.core.client.Scheduler;
import com.google.gwt.event.dom.client.ContextMenuEvent;
import com.google.gwt.http.client.Response;
+import com.google.gwt.http.client.URL;
import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.text.shared.SafeHtmlRenderer;
if (iter.hasNext()) {
final Folder f = iter.next();
- String path = "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + f.getPrefix();
+ String path = "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + URL.encodeQueryString(f.getPrefix());
GetRequest<Folder> getFolder = new GetRequest<Folder>(Folder.class, app.getApiPath(), f.getOwner(), path, f) {
@Override
public void onSuccess(Folder _result) {
}
public void fetchFolder(final Folder f, final ListDataProvider<Folder> dataProvider, final boolean showfiles) {
- String path = "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + f.getPrefix();
+ String path = "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + URL.encodeQueryString(f.getPrefix());
GetRequest<Folder> getFolder = new GetRequest<Folder>(Folder.class, app.getApiPath(), f.getOwner(), path, f) {
@Override
public void onSuccess(final Folder _result) {
import com.google.gwt.core.client.Scheduler;
import com.google.gwt.event.dom.client.ContextMenuEvent;
import com.google.gwt.http.client.Response;
+import com.google.gwt.http.client.URL;
import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.text.shared.SafeHtmlRenderer;
if (iter.hasNext()) {
final Folder f = iter.next();
- String path = "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + f.getPrefix();
+ String path = "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + URL.encodeQueryString(f.getPrefix());
GetRequest<Folder> getFolder = new GetRequest<Folder>(Folder.class, app.getApiPath(), username, path, f) {
@Override
public void onSuccess(Folder _result) {
}
public void fetchFolder(final Folder f, final ListDataProvider<Folder> dataProvider, final boolean showfiles) {
- String path = "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + f.getPrefix();
+ String path = "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + URL.encodeQueryString(f.getPrefix());
GetRequest<Folder> getFolder = new GetRequest<Folder>(Folder.class, app.getApiPath(), f.getOwner(), path, f) {
@Override
public void onSuccess(final Folder _result) {
import com.google.gwt.http.client.RequestBuilder;
import com.google.gwt.http.client.RequestException;
import com.google.gwt.http.client.Response;
+import com.google.gwt.http.client.URL;
+
import gr.grnet.pithos.web.client.foldertree.Resource;
import java.util.HashMap;
import java.util.Map;
import com.google.gwt.http.client.RequestBuilder;
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.DateTimeFormat;
+import com.google.gwt.i18n.client.DateTimeFormat.PredefinedFormat;
public abstract class GetRequest<T extends Resource> implements ScheduledCommand {
private int okCode;
- protected T cached;
-
protected T result;
private Map<String, String> headers = new HashMap<String, String>();
@Override
public void execute() {
+ if (path.contains("?"))
+ path += "&t=" + System.currentTimeMillis();
+ else
+ path += "?t=" + System.currentTimeMillis();
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, api + owner + path);
- builder.setHeader("If-Modified-Since", "0");
for (String header : headers.keySet()) {
builder.setHeader(header, headers.get(header));
}
@Override
public void onError(@SuppressWarnings("unused") Request request, Throwable throwable) {
if (throwable instanceof RestException) {
- if (((RestException) throwable).getHttpStatusCode() == 304 && cached != null){
- GWT.log("Using cache: " + cached.toString(), null);
- onSuccess(cached);
+ if (((RestException) throwable).getHttpStatusCode() == 304 && result != null){
+ GWT.log("Using cache: " + result.toString(), null);
+ onSuccess(result);
return;
}
}
import com.google.gwt.http.client.RequestBuilder;
import com.google.gwt.http.client.RequestException;
import com.google.gwt.http.client.Response;
+import com.google.gwt.http.client.URL;
public abstract class HeadRequest<T extends Resource> implements ScheduledCommand {
@Override
public void execute() {
+ if (path.contains("?"))
+ path += "&t=" + System.currentTimeMillis();
+ else
+ path += "?t=" + System.currentTimeMillis();
RequestBuilder builder = new RequestBuilder(RequestBuilder.HEAD, api + owner + path);
- builder.setHeader("If-Modified-Since", "0");
for (String header : headers.keySet()) {
builder.setHeader(header, headers.get(header));
}
import com.google.gwt.http.client.RequestBuilder;
import com.google.gwt.http.client.RequestException;
import com.google.gwt.http.client.Response;
+import com.google.gwt.http.client.URL;
+
import gr.grnet.pithos.web.client.foldertree.Resource;
import java.util.HashMap;
import java.util.Map;
import com.google.gwt.http.client.RequestBuilder;
import com.google.gwt.http.client.RequestException;
import com.google.gwt.http.client.Response;
+import com.google.gwt.http.client.URL;
+
import gr.grnet.pithos.web.client.foldertree.Resource;
import java.util.HashMap;
import java.util.Map;
import gr.grnet.pithos.web.client.foldertree.File;
import gr.grnet.pithos.web.client.foldertree.Resource;
+import java.util.Date;
import java.util.LinkedHashSet;
import java.util.Set;
public Set<File> getFiles() {
return files;
}
+
+ @Override
+ public Date getLastModified() {
+ return null;
+ }
}