From db5bfcd9530c36c0fb88221391650ededf497275 Mon Sep 17 00:00:00 2001 From: Christos Stathis Date: Fri, 8 Jul 2011 13:54:26 +0300 Subject: [PATCH] Fixed folder deletion with all subfolders and files --- .../pithos/web/client/DeleteFolderDialog.java | 134 +++++++++++++++++--- .../web/client/foldertree/AccountResource.java | 5 - .../grnet/pithos/web/client/foldertree/File.java | 5 - .../grnet/pithos/web/client/foldertree/Folder.java | 5 - .../pithos/web/client/foldertree/Resource.java | 4 +- 5 files changed, 118 insertions(+), 35 deletions(-) diff --git a/web_client/src/gr/grnet/pithos/web/client/DeleteFolderDialog.java b/web_client/src/gr/grnet/pithos/web/client/DeleteFolderDialog.java index 4e1cbf1..a3b3eac 100644 --- a/web_client/src/gr/grnet/pithos/web/client/DeleteFolderDialog.java +++ b/web_client/src/gr/grnet/pithos/web/client/DeleteFolderDialog.java @@ -36,13 +36,26 @@ package gr.grnet.pithos.web.client; import com.google.gwt.core.client.Scheduler; import com.google.gwt.event.dom.client.KeyDownEvent; +import com.google.gwt.http.client.Request; +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.json.client.JSONArray; +import com.google.gwt.json.client.JSONObject; +import com.google.gwt.json.client.JSONParser; +import com.google.gwt.json.client.JSONString; +import com.google.gwt.json.client.JSONValue; import com.google.gwt.user.client.Event; import gr.grnet.pithos.web.client.MessagePanel.Images; +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.DeleteCommand; import gr.grnet.pithos.web.client.rest.DeleteRequest; +import gr.grnet.pithos.web.client.rest.GetRequest; import gr.grnet.pithos.web.client.rest.RestException; +import gr.grnet.pithos.web.client.rest.RestRequestCallback; import gr.grnet.pithos.web.client.rest.resource.FolderResource; import gr.grnet.pithos.web.client.rest.resource.RestResource; import gr.grnet.pithos.web.client.rest.resource.RestResourceWrapper; @@ -62,6 +75,8 @@ import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.HasHorizontalAlignment; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.VerticalPanel; +import java.util.Iterator; +import java.util.List; /** * The 'delete folder' dialog box. @@ -126,27 +141,112 @@ public class DeleteFolderDialog extends DialogBox { * */ private void deleteFolder() { - String prefix = folder.getPrefix(); - String path = app.getApiPath() + app.getUsername() + "/" + folder.getContainer() + (prefix.length() == 0 ? "" : "/" + prefix); - DeleteRequest deleteFolder = new DeleteRequest(path) { - @Override - public void onSuccess(Resource result) { - app.updateFolder(folder.getParent()); + String path = app.getApiPath() + app.getUsername() + "/" + folder.getContainer() + "?format=json&delimiter=/&prefix=" + folder.getPrefix(); + RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, path); + builder.setHeader("If-Modified-Since", "0"); + builder.setHeader("X-Auth-Token", app.getToken()); + try { + builder.sendRequest("", new RequestCallback() { + @Override + public void onResponseReceived(Request request, Response response) { + if (response.getStatusCode() == Response.SC_OK) { + JSONValue json = JSONParser.parseStrict(response.getText()); + JSONArray array = json.isArray(); + int i = 0; + if (array != null) { + deleteObject(i, array); + } + } + } + + @Override + public void onError(Request request, Throwable exception) { + GSS.get().displayError("System error unable to delete folder: " + exception.getMessage()); + } + }); + } + catch (RequestException e) { + } + } + + private void deleteObject(final int i, final JSONArray array) { + if (i < array.size()) { + JSONObject o = array.get(i).isObject(); + if (o != null && !o.containsKey("subdir")) { + JSONString name = o.get("name").isString(); + String path = app.getApiPath() + app.getUsername() + "/" + folder.getContainer() + "/" + name.stringValue(); + DeleteRequest delete = new DeleteRequest(path) { + @Override + public void onSuccess(Resource result) { + deleteObject(i + 1, array); + } + + @Override + public void onError(Throwable t) { + GWT.log("", t); + GSS.get().displayError("System error unable to delete folder: " + t.getMessage()); + } + }; + delete.setHeader("X-Auth-Token", app.getToken()); + Scheduler.get().scheduleDeferred(delete); } + else { + String subdir = o.get("subdir").isString().stringValue(); + subdir = subdir.substring(0, subdir.length() - 1); + String path = app.getApiPath() + app.getUsername() + "/" + folder.getContainer() + "?format=json&delimiter=/&prefix=" + subdir; + RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, path); + builder.setHeader("If-Modified-Since", "0"); + builder.setHeader("X-Auth-Token", app.getToken()); + try { + builder.sendRequest("", new RequestCallback() { + @Override + public void onResponseReceived(Request request, Response response) { + if (response.getStatusCode() == Response.SC_OK) { + JSONValue json = JSONParser.parseStrict(response.getText()); + JSONArray array2 = json.isArray(); + if (array2 != null) { + int l = array.size(); + for (int j=0; j getContainers() { return containers; } 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 2ba3284..9a17ba8 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 @@ -99,11 +99,6 @@ public class File extends Resource { return versionTimestamp; } - @Override - public String getLastModifiedSince() { - return null; //To change body of implemented methods use File | Settings | File Templates. - } - public String getUri() { return "/" + container + "/" + path; } 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 271274b..d7175cf 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 @@ -176,11 +176,6 @@ public class Folder extends Resource { } } - @Override - public String getLastModifiedSince() { - return null; //To change body of implemented methods use File | Settings | File Templates. - } - public static Folder createFromResponse(Response response, Folder result) { Folder f = null; if (result == null) 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 5ed637a..418daae 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 @@ -46,7 +46,7 @@ import com.google.gwt.json.client.JSONValue; import gr.grnet.pithos.web.client.rest.resource.FolderResource; import java.util.Date; -public abstract class Resource { +public class Resource { protected static String unmarshallString(JSONObject obj, String key){ if(obj.get(key) != null) { @@ -93,8 +93,6 @@ public abstract class Resource { return (new Date(ms)).toUTCString(); }-*/; - public abstract String getLastModifiedSince(); - public static T createFromResponse(Class aClass, Response response, T result) { if (aClass.equals(AccountResource.class)) { result = (T) AccountResource.createFromResponse(response); -- 1.7.10.4