Revision 49df7570

b/web_client/src/gr/grnet/pithos/web/client/DeleteFolderDialog.java
90 90
	 * The widget's constructor.
91 91
	 * @param images the supplied images
92 92
	 */
93
	public DeleteFolderDialog(GSS app, Images images, Folder folder) {
94
        this.app = app;
95
        this.folder = folder;
93
	public DeleteFolderDialog(GSS _app, Images images, Folder _folder) {
94
        this.app = _app;
95
        this.folder = _folder;
96 96
		// Set the dialog's caption.
97 97
		setText("Confirmation");
98 98
		setAnimationEnabled(true);
......
111 111
		Button ok = new Button("Delete", new ClickHandler() {
112 112
			@Override
113 113
			public void onClick(ClickEvent event) {
114
				deleteFolder();
114
				app.deleteFolder(folder);
115 115
				hide();
116 116
			}
117 117
		});
......
136 136
		setWidget(outer);
137 137
	}
138 138

  
139
	/**
140
	 * Generate an RPC request to delete a folder.
141
	 *
142
	 */
143
	private void deleteFolder() {
144
        String path = app.getApiPath() + app.getUsername() + "/" + folder.getContainer() + "?format=json&delimiter=/&prefix=" + folder.getPrefix();
145
        RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, path);
146
        builder.setHeader("If-Modified-Since", "0");
147
        builder.setHeader("X-Auth-Token", app.getToken());
148
        try {
149
            builder.sendRequest("", new RequestCallback() {
150
                @Override
151
                public void onResponseReceived(Request request, Response response) {
152
                    if (response.getStatusCode() == Response.SC_OK) {
153
                        JSONValue json = JSONParser.parseStrict(response.getText());
154
                        JSONArray array = json.isArray();
155
                        int i = 0;
156
                        if (array != null) {
157
                            deleteObject(i, array);
158
                        }
159
                    }
160
                }
161

  
162
                @Override
163
                public void onError(Request request, Throwable exception) {
164
                    GSS.get().displayError("System error unable to delete folder: " + exception.getMessage());
165
                }
166
            });
167
        }
168
        catch (RequestException e) {
169
        }
170
	}
171

  
172
    private void deleteObject(final int i, final JSONArray array) {
173
        if (i < array.size()) {
174
            JSONObject o = array.get(i).isObject();
175
            if (o != null && !o.containsKey("subdir")) {
176
                JSONString name = o.get("name").isString();
177
                String path = app.getApiPath() + app.getUsername() + "/" + folder.getContainer() + "/" + name.stringValue();
178
                DeleteRequest delete = new DeleteRequest(path) {
179
                    @Override
180
                    public void onSuccess(Resource result) {
181
                        deleteObject(i + 1, array);
182
                    }
183

  
184
                    @Override
185
                    public void onError(Throwable t) {
186
                        GWT.log("", t);
187
                        GSS.get().displayError("System error unable to delete folder: " + t.getMessage());
188
                    }
189
                };
190
                delete.setHeader("X-Auth-Token", app.getToken());
191
                Scheduler.get().scheduleDeferred(delete);
192
            }
193
            else {
194
                String subdir = o.get("subdir").isString().stringValue();
195
                subdir = subdir.substring(0, subdir.length() - 1);
196
                String path = app.getApiPath() + app.getUsername() + "/" + folder.getContainer() + "?format=json&delimiter=/&prefix=" + subdir;
197
                RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, path);
198
                builder.setHeader("If-Modified-Since", "0");
199
                builder.setHeader("X-Auth-Token", app.getToken());
200
                try {
201
                    builder.sendRequest("", new RequestCallback() {
202
                        @Override
203
                        public void onResponseReceived(Request request, Response response) {
204
                            if (response.getStatusCode() == Response.SC_OK) {
205
                                JSONValue json = JSONParser.parseStrict(response.getText());
206
                                JSONArray array2 = json.isArray();
207
                                if (array2 != null) {
208
                                    int l = array.size();
209
                                    for (int j=0; j<array2.size(); j++) {
210
                                        array.set(l++, array2.get(j));
211
                                    }
212
                                }
213
                                deleteObject(i + 1, array);
214
                            }
215
                        }
216

  
217
                        @Override
218
                        public void onError(Request request, Throwable exception) {
219
                            GSS.get().displayError("System error unable to delete folder: " + exception.getMessage());
220
                        }
221
                    });
222
                }
223
                catch (RequestException e) {
224
                }
225
            }
226
        }
227
        else {
228
            String prefix = folder.getPrefix();
229
            String path = app.getApiPath() + app.getUsername() + "/" + folder.getContainer() + (prefix.length() == 0 ? "" : "/" + prefix);
230
            DeleteRequest deleteFolder = new DeleteRequest(path) {
231
                @Override
232
                public void onSuccess(Resource result) {
233
                    app.updateFolder(folder.getParent());
234
                }
235

  
236
                @Override
237
                public void onError(Throwable t) {
238
                    GWT.log("", t);
239
                    if (t instanceof RestException) {
240
                        app.displayError("Unable to delete folder: "+((RestException) t).getHttpStatusText());
241
                    }
242
                    else
243
                        GSS.get().displayError("System error unable to delete folder: " + t.getMessage());
244
                }
245
            };
246
            deleteFolder.setHeader("X-Auth-Token", app.getToken());
247
            Scheduler.get().scheduleDeferred(deleteFolder);
248
        }
249
    }
250

  
251 139
	@Override
252 140
	protected void onPreviewNativeEvent(NativePreviewEvent preview) {
253 141
		super.onPreviewNativeEvent(preview);
......
259 147
			switch (evt.getKeyCode()) {
260 148
				case KeyCodes.KEY_ENTER:
261 149
					hide();
262
					deleteFolder();
150
					app.deleteFolder(folder);
263 151
					break;
264 152
				case KeyCodes.KEY_ESCAPE:
265 153
					hide();
b/web_client/src/gr/grnet/pithos/web/client/GSS.java
36 36

  
37 37
import com.google.gwt.core.client.Scheduler;
38 38
import com.google.gwt.core.client.Scheduler.ScheduledCommand;
39
import com.google.gwt.http.client.Request;
40
import com.google.gwt.http.client.RequestBuilder;
41
import com.google.gwt.http.client.RequestCallback;
42
import com.google.gwt.http.client.RequestException;
43
import com.google.gwt.http.client.Response;
44
import com.google.gwt.json.client.JSONArray;
45
import com.google.gwt.json.client.JSONObject;
46
import com.google.gwt.json.client.JSONParser;
47
import com.google.gwt.json.client.JSONString;
48
import com.google.gwt.json.client.JSONValue;
39 49
import com.google.gwt.view.client.SelectionChangeEvent;
40 50
import com.google.gwt.view.client.SingleSelectionModel;
41 51
import gr.grnet.pithos.web.client.commands.GetUserCommand;
......
44 54
import gr.grnet.pithos.web.client.foldertree.Folder;
45 55
import gr.grnet.pithos.web.client.foldertree.FolderTreeView;
46 56
import gr.grnet.pithos.web.client.foldertree.FolderTreeViewModel;
57
import gr.grnet.pithos.web.client.foldertree.Resource;
58
import gr.grnet.pithos.web.client.rest.DeleteRequest;
47 59
import gr.grnet.pithos.web.client.rest.GetRequest;
48 60
import gr.grnet.pithos.web.client.rest.RestException;
49 61
import gr.grnet.pithos.web.client.rest.resource.FileResource;
......
794 806
		}
795 807
		
796 808
	}
809

  
810
    public void deleteFolder(final Folder folder) {
811
        String path = getApiPath() + getUsername() + "/" + folder.getContainer() + "?format=json&delimiter=/&prefix=" + folder.getPrefix();
812
        RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, path);
813
        builder.setHeader("If-Modified-Since", "0");
814
        builder.setHeader("X-Auth-Token", getToken());
815
        try {
816
            builder.sendRequest("", new RequestCallback() {
817
                @Override
818
                public void onResponseReceived(Request request, Response response) {
819
                    if (response.getStatusCode() == Response.SC_OK) {
820
                        JSONValue json = JSONParser.parseStrict(response.getText());
821
                        JSONArray array = json.isArray();
822
                        int i = 0;
823
                        if (array != null) {
824
                            deleteObject(folder, i, array);
825
                        }
826
                    }
827
                }
828

  
829
                @Override
830
                public void onError(Request request, Throwable exception) {
831
                    GSS.get().displayError("System error unable to delete folder: " + exception.getMessage());
832
                }
833
            });
834
        }
835
        catch (RequestException e) {
836
        }
837
    }
838

  
839
    public void deleteObject(final Folder folder, final int i, final JSONArray array) {
840
        if (i < array.size()) {
841
            JSONObject o = array.get(i).isObject();
842
            if (o != null && !o.containsKey("subdir")) {
843
                JSONString name = o.get("name").isString();
844
                String path = getApiPath() + getUsername() + "/" + folder.getContainer() + "/" + name.stringValue();
845
                DeleteRequest delete = new DeleteRequest(path) {
846
                    @Override
847
                    public void onSuccess(Resource result) {
848
                        deleteObject(folder, i + 1, array);
849
                    }
850

  
851
                    @Override
852
                    public void onError(Throwable t) {
853
                        GWT.log("", t);
854
                        GSS.get().displayError("System error unable to delete folder: " + t.getMessage());
855
                    }
856
                };
857
                delete.setHeader("X-Auth-Token", getToken());
858
                Scheduler.get().scheduleDeferred(delete);
859
            }
860
            else {
861
                String subdir = o.get("subdir").isString().stringValue();
862
                subdir = subdir.substring(0, subdir.length() - 1);
863
                String path = getApiPath() + getUsername() + "/" + folder.getContainer() + "?format=json&delimiter=/&prefix=" + subdir;
864
                RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, path);
865
                builder.setHeader("If-Modified-Since", "0");
866
                builder.setHeader("X-Auth-Token", getToken());
867
                try {
868
                    builder.sendRequest("", new RequestCallback() {
869
                        @Override
870
                        public void onResponseReceived(Request request, Response response) {
871
                            if (response.getStatusCode() == Response.SC_OK) {
872
                                JSONValue json = JSONParser.parseStrict(response.getText());
873
                                JSONArray array2 = json.isArray();
874
                                if (array2 != null) {
875
                                    int l = array.size();
876
                                    for (int j=0; j<array2.size(); j++) {
877
                                        array.set(l++, array2.get(j));
878
                                    }
879
                                }
880
                                deleteObject(folder, i + 1, array);
881
                            }
882
                        }
883

  
884
                        @Override
885
                        public void onError(Request request, Throwable exception) {
886
                            GSS.get().displayError("System error unable to delete folder: " + exception.getMessage());
887
                        }
888
                    });
889
                }
890
                catch (RequestException e) {
891
                }
892
            }
893
        }
894
        else {
895
            String prefix = folder.getPrefix();
896
            String path = getApiPath() + getUsername() + "/" + folder.getContainer() + (prefix.length() == 0 ? "" : "/" + prefix);
897
            DeleteRequest deleteFolder = new DeleteRequest(path) {
898
                @Override
899
                public void onSuccess(Resource result) {
900
                    updateFolder(folder.getParent());
901
                }
902

  
903
                @Override
904
                public void onError(Throwable t) {
905
                    GWT.log("", t);
906
                    if (t instanceof RestException) {
907
                        displayError("Unable to delete folder: "+((RestException) t).getHttpStatusText());
908
                    }
909
                    else
910
                        GSS.get().displayError("System error unable to delete folder: " + t.getMessage());
911
                }
912
            };
913
            deleteFolder.setHeader("X-Auth-Token", getToken());
914
            Scheduler.get().scheduleDeferred(deleteFolder);
915
        }
916
    }
797 917
}
b/web_client/src/gr/grnet/pithos/web/client/commands/PasteCommand.java
81 81
                });
82 82
            }
83 83
            else {
84
                copyFolder(tobeCopied, folder.getUri(), new Command() {
85
                    @Override
86
                    public void execute() {
87
                        app.getClipboard().clear();
88
                        app.deleteFolder(tobeCopied);
89
                        app.updateFolder(folder);
90
                    }
91
                });
84 92

  
85 93
            }
86 94
        }

Also available in: Unified diff