\r
import com.google.gwt.core.client.Scheduler;\r
import com.google.gwt.event.dom.client.KeyDownEvent;\r
+import com.google.gwt.http.client.Request;\r
+import com.google.gwt.http.client.RequestBuilder;\r
+import com.google.gwt.http.client.RequestCallback;\r
+import com.google.gwt.http.client.RequestException;\r
+import com.google.gwt.http.client.Response;\r
+import com.google.gwt.json.client.JSONArray;\r
+import com.google.gwt.json.client.JSONObject;\r
+import com.google.gwt.json.client.JSONParser;\r
+import com.google.gwt.json.client.JSONString;\r
+import com.google.gwt.json.client.JSONValue;\r
import com.google.gwt.user.client.Event;\r
import gr.grnet.pithos.web.client.MessagePanel.Images;\r
+import gr.grnet.pithos.web.client.foldertree.File;\r
import gr.grnet.pithos.web.client.foldertree.Folder;\r
import gr.grnet.pithos.web.client.foldertree.Resource;\r
import gr.grnet.pithos.web.client.rest.DeleteCommand;\r
import gr.grnet.pithos.web.client.rest.DeleteRequest;\r
+import gr.grnet.pithos.web.client.rest.GetRequest;\r
import gr.grnet.pithos.web.client.rest.RestException;\r
+import gr.grnet.pithos.web.client.rest.RestRequestCallback;\r
import gr.grnet.pithos.web.client.rest.resource.FolderResource;\r
import gr.grnet.pithos.web.client.rest.resource.RestResource;\r
import gr.grnet.pithos.web.client.rest.resource.RestResourceWrapper;\r
import com.google.gwt.user.client.ui.HasHorizontalAlignment;\r
import com.google.gwt.user.client.ui.HorizontalPanel;\r
import com.google.gwt.user.client.ui.VerticalPanel;\r
+import java.util.Iterator;\r
+import java.util.List;\r
\r
/**\r
* The 'delete folder' dialog box.\r
*\r
*/\r
private void deleteFolder() {\r
- String prefix = folder.getPrefix();\r
- String path = app.getApiPath() + app.getUsername() + "/" + folder.getContainer() + (prefix.length() == 0 ? "" : "/" + prefix);\r
- DeleteRequest deleteFolder = new DeleteRequest(path) {\r
- @Override\r
- public void onSuccess(Resource result) {\r
- app.updateFolder(folder.getParent());\r
+ String path = app.getApiPath() + app.getUsername() + "/" + folder.getContainer() + "?format=json&delimiter=/&prefix=" + folder.getPrefix();\r
+ RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, path);\r
+ builder.setHeader("If-Modified-Since", "0");\r
+ builder.setHeader("X-Auth-Token", app.getToken());\r
+ try {\r
+ builder.sendRequest("", new RequestCallback() {\r
+ @Override\r
+ public void onResponseReceived(Request request, Response response) {\r
+ if (response.getStatusCode() == Response.SC_OK) {\r
+ JSONValue json = JSONParser.parseStrict(response.getText());\r
+ JSONArray array = json.isArray();\r
+ int i = 0;\r
+ if (array != null) {\r
+ deleteObject(i, array);\r
+ }\r
+ }\r
+ }\r
+\r
+ @Override\r
+ public void onError(Request request, Throwable exception) {\r
+ GSS.get().displayError("System error unable to delete folder: " + exception.getMessage());\r
+ }\r
+ });\r
+ }\r
+ catch (RequestException e) {\r
+ }\r
+ }\r
+\r
+ private void deleteObject(final int i, final JSONArray array) {\r
+ if (i < array.size()) {\r
+ JSONObject o = array.get(i).isObject();\r
+ if (o != null && !o.containsKey("subdir")) {\r
+ JSONString name = o.get("name").isString();\r
+ String path = app.getApiPath() + app.getUsername() + "/" + folder.getContainer() + "/" + name.stringValue();\r
+ DeleteRequest delete = new DeleteRequest(path) {\r
+ @Override\r
+ public void onSuccess(Resource result) {\r
+ deleteObject(i + 1, array);\r
+ }\r
+\r
+ @Override\r
+ public void onError(Throwable t) {\r
+ GWT.log("", t);\r
+ GSS.get().displayError("System error unable to delete folder: " + t.getMessage());\r
+ }\r
+ };\r
+ delete.setHeader("X-Auth-Token", app.getToken());\r
+ Scheduler.get().scheduleDeferred(delete);\r
}\r
+ else {\r
+ String subdir = o.get("subdir").isString().stringValue();\r
+ subdir = subdir.substring(0, subdir.length() - 1);\r
+ String path = app.getApiPath() + app.getUsername() + "/" + folder.getContainer() + "?format=json&delimiter=/&prefix=" + subdir;\r
+ RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, path);\r
+ builder.setHeader("If-Modified-Since", "0");\r
+ builder.setHeader("X-Auth-Token", app.getToken());\r
+ try {\r
+ builder.sendRequest("", new RequestCallback() {\r
+ @Override\r
+ public void onResponseReceived(Request request, Response response) {\r
+ if (response.getStatusCode() == Response.SC_OK) {\r
+ JSONValue json = JSONParser.parseStrict(response.getText());\r
+ JSONArray array2 = json.isArray();\r
+ if (array2 != null) {\r
+ int l = array.size();\r
+ for (int j=0; j<array2.size(); j++) {\r
+ array.set(l++, array2.get(j));\r
+ }\r
+ }\r
+ deleteObject(i + 1, array);\r
+ }\r
+ }\r
\r
- @Override\r
- public void onError(Throwable t) {\r
- GWT.log("", t);\r
- if (t instanceof RestException) {\r
- app.displayError("Unable to delete folder: "+((RestException) t).getHttpStatusText());\r
+ @Override\r
+ public void onError(Request request, Throwable exception) {\r
+ GSS.get().displayError("System error unable to delete folder: " + exception.getMessage());\r
+ }\r
+ });\r
+ }\r
+ catch (RequestException e) {\r
}\r
- else\r
- GSS.get().displayError("System error unable to delete folder: " + t.getMessage());\r
}\r
- };\r
- deleteFolder.setHeader("X-Auth-Token", app.getToken());\r
- Scheduler.get().scheduleDeferred(deleteFolder);\r
- }\r
+ }\r
+ else {\r
+ String prefix = folder.getPrefix();\r
+ String path = app.getApiPath() + app.getUsername() + "/" + folder.getContainer() + (prefix.length() == 0 ? "" : "/" + prefix);\r
+ DeleteRequest deleteFolder = new DeleteRequest(path) {\r
+ @Override\r
+ public void onSuccess(Resource result) {\r
+ app.updateFolder(folder.getParent());\r
+ }\r
+\r
+ @Override\r
+ public void onError(Throwable t) {\r
+ GWT.log("", t);\r
+ if (t instanceof RestException) {\r
+ app.displayError("Unable to delete folder: "+((RestException) t).getHttpStatusText());\r
+ }\r
+ else\r
+ GSS.get().displayError("System error unable to delete folder: " + t.getMessage());\r
+ }\r
+ };\r
+ deleteFolder.setHeader("X-Auth-Token", app.getToken());\r
+ Scheduler.get().scheduleDeferred(deleteFolder);\r
+ }\r
+ }\r
\r
@Override\r
protected void onPreviewNativeEvent(NativePreviewEvent preview) {\r