Revision d58c0da5

b/src/gr/grnet/pithos/web/client/FolderPropertiesDialog.java
299 299
        	return;
300 300
        if (!folder.isContainer() && !folder.getName().equals(newName)) {
301 301
            final String path = folder.getParent().getUri() + "/" + newName;
302
            PutRequest newFolder = new PutRequest(app.getApiPath(), folder.getParent().getOwner(), path) {
303
                @Override
304
                public void onSuccess(Resource result) {
305
                    Iterator<File> iter = folder.getFiles().iterator();
306
                    app.copyFiles(iter, folder.getParent().getOwner(), folder.getParent().getUri() + "/" + newName, new Command() {
307
                        @Override
308
                        public void execute() {
309
                            Iterator<Folder> iterf = folder.getSubfolders().iterator();
310
                            app.copySubfolders(iterf, folder.getParent().getOwner(), folder.getParent().getUri() + "/" + newName, new Command() {
311
                                @Override
312
                                public void execute() {
313
                                    app.deleteFolder(folder, new Command() {
314
										
315
										@Override
316
										public void execute() {
317
		                                    app.updateFolder(folder.getParent(), false, new Command() {
318
		                            			
319
		                            			@Override
320
		                            			public void execute() {
321
		                            				app.updateMySharedRoot();
322
		                            			}
323
		                            		}, true);
324
										}
325
									});
326
                                }
327
                            });
328
                        }
329
                    });
330
                }
331

  
332
                @Override
333
                public void onError(Throwable t) {
334
                    GWT.log("", t);
335
					app.setError(t);
336
                    if(t instanceof RestException){
337
                        app.displayError("Unable to update folder: " + ((RestException) t).getHttpStatusText());
338
                    }
339
                    else
340
                        app.displayError("System error modifying folder: " + t.getMessage());
341
                }
342

  
302
            app.copyFolder(folder, folder.getOwner(), path, true, new Command() {
303
				
343 304
				@Override
344
				protected void onUnauthorized(Response response) {
345
					app.sessionExpired();
305
				public void execute() {
306
                    app.updateFolder(folder.getParent(), false, new Command() {
307
            			
308
            			@Override
309
            			public void execute() {
310
            				app.updateMySharedRoot();
311
            			}
312
            		}, true);
346 313
				}
347
            };
348
            newFolder.setHeader("X-Auth-Token", app.getToken());
349
            newFolder.setHeader("Content-Type", "application/folder");
350
            newFolder.setHeader("Accept", "*/*");
351
            newFolder.setHeader("Content-Length", "0");
352
            Scheduler.get().scheduleDeferred(newFolder);
314
			});
353 315
        }
354 316
        else
355 317
            app.updateFolder(folder.getParent(), false, new Command() {
b/src/gr/grnet/pithos/web/client/Pithos.java
982 982
        }
983 983
    }
984 984

  
985
    public void copySubfolders(final Iterator<Folder> iter, final String targetUsername, final String targetUri, final Command callback) {
986
        if (iter.hasNext()) {
987
            final Folder f = iter.next();
988
            copyFolder(f, targetUsername, targetUri, new Command() {
989
				
990
				@Override
991
				public void execute() {
992
					copySubfolders(iter, targetUsername, targetUri, callback);
993
				}
994
			});
995
        }
996
        else  if (callback != null) {
997
            callback.execute();
998
        }
999
    }
1000

  
1001
    public void copyFolder(final Folder f, final String targetUsername, final String targetUri, final Command callback) {
1002
        String path = targetUri + "/" + f.getName() + "?delimiter=/";
985
    public void copyFolder(final Folder f, final String targetUsername, final String targetUri, boolean move, final Command callback) {
986
        String path = targetUri + "?delimiter=/";
1003 987
        PutRequest copyFolder = new PutRequest(getApiPath(), targetUsername, path) {
1004 988
            @Override
1005 989
            public void onSuccess(Resource result) {
......
1029 1013
        copyFolder.setHeader("Content-Type", "application/directory");
1030 1014
        if (!f.getOwner().equals(targetUsername))
1031 1015
        	copyFolder.setHeader("X-Source-Account", f.getOwner());
1032
        copyFolder.setHeader("X-Copy-From", URL.encodePathSegment(f.getUri()));
1016
        if (move)
1017
            copyFolder.setHeader("X-Move-From", URL.encodePathSegment(f.getUri()));
1018
        else
1019
        	copyFolder.setHeader("X-Copy-From", URL.encodePathSegment(f.getUri()));
1033 1020
        Scheduler.get().scheduleDeferred(copyFolder);
1034 1021
    }
1035 1022
    
b/src/gr/grnet/pithos/web/client/commands/PasteCommand.java
76 76
        if (clipboardItem instanceof Folder) {
77 77
            final Folder tobeCopied = (Folder) clipboardItem;
78 78
            if (operation == Clipboard.COPY) {
79
                app.copyFolder(tobeCopied, folder.getOwner(), folder.getUri(), new Command() {
79
            	String targetUri = folder.getUri() + "/" + tobeCopied.getName();
80
                app.copyFolder(tobeCopied, folder.getOwner(), targetUri, false, new Command() {
80 81
                    @Override
81 82
                    public void execute() {
82 83
                        app.getClipboard().clear();
......
91 92
                });
92 93
            }
93 94
            else {
94
                app.copyFolder(tobeCopied, folder.getOwner(), folder.getUri(), new Command() {
95
            	String targetUri = folder.getUri() + "/" + tobeCopied.getName();
96
                app.copyFolder(tobeCopied, folder.getOwner(), targetUri, true, new Command() {
95 97
                    @Override
96 98
                    public void execute() {
97 99
                        app.getClipboard().clear();
98
                        app.deleteFolder(tobeCopied, null);
99 100
                        app.updateFolder(folder, true, null, true);
100 101
                    }
101 102
                });
b/src/gr/grnet/pithos/web/client/commands/RestoreTrashCommand.java
111 111

  
112 112
    private void untrashFolder(final Folder f, final Command callback) {
113 113
        String path = "/" + Pithos.HOME_CONTAINER + "/" + f.getPrefix();
114
        PutRequest createFolder = new PutRequest(app.getApiPath(), app.getUsername(), path) {
115
            @Override
116
            public void onSuccess(Resource result) {
117
            	GetRequest<Folder> getFolder = new GetRequest<Folder>(Folder.class, app.getApiPath(), f.getOwner(), "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + URL.encodeQueryString(f.getPrefix()), f) {
118

  
119
					@Override
120
					public void onSuccess(final Folder _f) {
121
		                Iterator<File> iter = _f.getFiles().iterator();
122
		                untrashFiles(iter, new Command() {
123
		                    @Override
124
		                    public void execute() {
125
		                        Iterator<Folder> iterf = _f.getSubfolders().iterator();
126
		                        untrashSubfolders(iterf, new Command() {
127
									
128
									@Override
129
									public void execute() {
130
										DeleteRequest deleteFolder = new DeleteRequest(app.getApiPath(), _f.getOwner(), URL.encode(_f.getUri())) {
131
											
132
											@Override
133
											public void onSuccess(Resource _result) {
134
												app.updateRootFolder(callback);
135
											}
136
											
137
											@Override
138
											public void onError(Throwable t) {
139
							                    GWT.log("", t);
140
												app.setError(t);
141
							                    if (t instanceof RestException) {
142
							                    	if (((RestException) t).getHttpStatusCode() == Response.SC_NOT_FOUND)
143
							                    		onSuccess(null);
144
							                    	else
145
							                    		app.displayError("Unable to delete folder: " + ((RestException) t).getHttpStatusText());
146
							                    }
147
							                    else
148
							                        app.displayError("System error unable to delete folder: "+t.getMessage());
149
											}
150

  
151
											@Override
152
											protected void onUnauthorized(Response response) {
153
												app.sessionExpired();
154
											}
155
										};
156
										deleteFolder.setHeader("X-Auth-Token", app.getToken());
157
										Scheduler.get().scheduleDeferred(deleteFolder);
158
									}
159
								});
160
		                    }
161
		                });
162
					}
163

  
164
					@Override
165
					public void onError(Throwable t) {
166
		                GWT.log("", t);
167
						app.setError(t);
168
		                if (t instanceof RestException) {
169
		                    app.displayError("Unable to get folder: " + ((RestException) t).getHttpStatusText());
170
		                }
171
		                else
172
		                    app.displayError("System error getting folder: " + t.getMessage());
173
					}
174

  
175
					@Override
176
					protected void onUnauthorized(Response response) {
177
						app.sessionExpired();
178
					}
179
				};
180
				getFolder.setHeader("X-Auth-Token", app.getToken());
181
				Scheduler.get().scheduleDeferred(getFolder);
182
            }
183

  
184
            @Override
185
            public void onError(Throwable t) {
186
                GWT.log("", t);
187
				app.setError(t);
188
                if (t instanceof RestException) {
189
                    app.displayError("Unable to create folder:" + ((RestException) t).getHttpStatusText());
190
                }
191
                else
192
                    app.displayError("System error creating folder:" + t.getMessage());
193
            }
194

  
195
			@Override
196
			protected void onUnauthorized(Response response) {
197
				app.sessionExpired();
198
			}
199
        };
200
        createFolder.setHeader("X-Auth-Token", app.getToken());
201
        createFolder.setHeader("Accept", "*/*");
202
        createFolder.setHeader("Content-Length", "0");
203
        createFolder.setHeader("Content-Type", "application/folder");
204
        Scheduler.get().scheduleDeferred(createFolder);
114
        app.copyFolder(f, app.getUsername(), path, true, callback);
205 115
    }
206 116

  
207 117
    protected void untrashFiles(final Iterator<File> iter, final Command callback) {
b/src/gr/grnet/pithos/web/client/commands/ToTrashCommand.java
120 120
	}
121 121

  
122 122
    private void trashFolder(final Folder f, final Command callback) {
123
        String path = "/" + Pithos.TRASH_CONTAINER + "/" + f.getPrefix();
124
        PutRequest createFolder = new PutRequest(app.getApiPath(), app.getUsername(), path) {
125
            @Override
126
            public void onSuccess(Resource result) {
127
            	GetRequest<Folder> getFolder = new GetRequest<Folder>(Folder.class, app.getApiPath(), f.getOwner(), "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + URL.encodeQueryString(f.getPrefix()), f) {
128

  
129
					@Override
130
					public void onSuccess(final Folder _f) {
131
					    Iterator<File> iter = _f.getFiles().iterator();
132
					    trashFiles(iter, new Command() {
133
					        @Override
134
					        public void execute() {
135
					            Iterator<Folder> iterf = _f.getSubfolders().iterator();
136
					            trashSubfolders(iterf, new Command() {
137
									
138
									@Override
139
									public void execute() {
140
										DeleteRequest deleteFolder = new DeleteRequest(app.getApiPath(), _f.getOwner(), URL.encode(_f.getUri())) {
141
											
142
											@Override
143
											public void onSuccess(Resource _result) {
144
												if (callback != null)
145
													callback.execute();
146
											}
147
											
148
											@Override
149
											public void onError(Throwable t) {
150
							                    GWT.log("", t);
151
												app.setError(t);
152
							                    if (t instanceof RestException) {
153
							                    	if (((RestException) t).getHttpStatusCode() == Response.SC_NOT_FOUND)
154
							                    		onSuccess(null);
155
							                    	else
156
							                    		app.displayError("Unable to delete folder: " + ((RestException) t).getHttpStatusText());
157
							                    }
158
							                    else
159
							                        app.displayError("System error unable to delete folder: "+t.getMessage());
160
											}
161

  
162
											@Override
163
											protected void onUnauthorized(Response response) {
164
												app.sessionExpired();
165
											}
166
										};
167
										deleteFolder.setHeader("X-Auth-Token", app.getToken());
168
										Scheduler.get().scheduleDeferred(deleteFolder);
169
									}
170
								});
171
					        }
172
					    });
173
					}
174

  
175
					@Override
176
					public void onError(Throwable t) {
177
		                GWT.log("", t);
178
						app.setError(t);
179
		                if (t instanceof RestException) {
180
		                    app.displayError("Unable to get folder: " + ((RestException) t).getHttpStatusText());
181
		                }
182
		                else
183
		                    app.displayError("System error getting folder: " + t.getMessage());
184
					}
185

  
186
					@Override
187
					protected void onUnauthorized(Response response) {
188
						app.sessionExpired();
189
					}
190
				};
191
				getFolder.setHeader("X-Auth-Token", app.getToken());
192
				Scheduler.get().scheduleDeferred(getFolder);
193
            }
194

  
195
            @Override
196
            public void onError(Throwable t) {
197
                GWT.log("", t);
198
				app.setError(t);
199
                if (t instanceof RestException) {
200
                    app.displayError("Unable to create folder:" + ((RestException) t).getHttpStatusText());
201
                }
202
                else
203
                    app.displayError("System error creating folder:" + t.getMessage());
204
            }
205

  
206
			@Override
207
			protected void onUnauthorized(Response response) {
208
				app.sessionExpired();
209
			}
210
        };
211
        createFolder.setHeader("X-Auth-Token", app.getToken());
212
        createFolder.setHeader("Accept", "*/*");
213
        createFolder.setHeader("Content-Length", "0");
214
        createFolder.setHeader("Content-Type", "application/folder");
215
        Scheduler.get().scheduleDeferred(createFolder);
123
    	String path = "/" + Pithos.TRASH_CONTAINER + "/" + f.getPrefix();
124
    	app.copyFolder(f, app.getUsername(), path, true, callback);
216 125
    }
217

  
218

  
219
    
126
  
220 127
    protected void trashFiles(final Iterator<File> iter, final Command callback) {
221 128
        if (iter.hasNext()) {
222 129
            File file = iter.next();

Also available in: Unified diff