Revision f6c9957e

b/src/gr/grnet/pithos/web/client/FolderPermissionsDialog.java
215 215

  
216 216
	void updateFolder() {
217 217
        final Map<String, Boolean[]> perms = (permList.hasChanges() ? permList.getPermissions() : null);
218
        final String newName = folderName.getText().trim();
219
        if (!folder.isContainer() && !folder.getName().equals(newName)) {
220
            final String path = folder.getParent().getUri() + "/" + newName;
221
            PutRequest newFolder = new PutRequest(app.getApiPath(), folder.getParent().getOwner(), path) {
222
                @Override
223
                public void onSuccess(Resource result) {
224
                    Iterator<File> iter = folder.getFiles().iterator();
225
                    app.copyFiles(iter, folder.getParent().getOwner(), folder.getParent().getUri() + "/" + newName, new Command() {
226
                        @Override
227
                        public void execute() {
228
                            Iterator<Folder> iterf = folder.getSubfolders().iterator();
229
                            app.copySubfolders(iterf, folder.getParent().getOwner(), folder.getParent().getUri() + "/" + newName, new Command() {
230
                                @Override
231
                                public void execute() {
232
                                    app.deleteFolder(folder, null);
233
                                    updateMetadata(path + "?update=", perms);
234
                                }
235
                            });
236
                        }
237
                    });
238
                }
239

  
240
                @Override
241
                public void onError(Throwable t) {
242
                    GWT.log("", t);
243
					app.setError(t);
244
                    if(t instanceof RestException){
245
                        app.displayError("Unable to update folder: " + ((RestException) t).getHttpStatusText());
246
                    }
247
                    else
248
                        app.displayError("System error modifying folder: " + t.getMessage());
249
                }
250

  
251
				@Override
252
				protected void onUnauthorized(Response response) {
253
					app.sessionExpired();
254
				}
255
            };
256
            newFolder.setHeader("X-Auth-Token", app.getToken());
257
            newFolder.setHeader("Content-Type", "application/folder");
258
            newFolder.setHeader("Accept", "*/*");
259
            newFolder.setHeader("Content-Length", "0");
260
            Scheduler.get().scheduleDeferred(newFolder);
261
        }
262
        else
263
            updateMetadata(folder.getUri() + "?update=", perms);
218
        updateMetadata(folder.getUri() + "?update=", perms);
264 219
	}
265 220

  
266 221
	protected void updateMetadata(final String path, final Map<String, Boolean[]> newPermissions) {
b/src/gr/grnet/pithos/web/client/Pithos.java
900 900
	}
901 901

  
902 902
    public void deleteFolder(final Folder folder, final Command callback) {
903
        String path = getApiPath() + folder.getOwner() + "/" + folder.getContainer() + "?format=json&delimiter=/&prefix=" + URL.encodeQueryString(folder.getPrefix()) + "&t=" + System.currentTimeMillis();
904
        RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, path);
905
        builder.setHeader("X-Auth-Token", getToken());
906
        try {
907
            builder.sendRequest("", new RequestCallback() {
908
                @Override
909
                public void onResponseReceived(Request request, Response response) {
910
                    if (response.getStatusCode() == Response.SC_OK) {
911
                        JSONValue json = JSONParser.parseStrict(response.getText());
912
                        JSONArray array = json.isArray();
913
                        int i = 0;
914
                        if (array != null) {
915
                            deleteObject(folder, i, array, callback);
916
                        }
917
                    }
918
                }
919

  
920
                @Override
921
                public void onError(Request request, Throwable exception) {
922
                	setError(exception);
923
                    displayError("System error unable to delete folder: " + exception.getMessage());
924
                }
925
            });
926
        }
927
        catch (RequestException e) {
928
        }
929
    }
930

  
931
    void deleteObject(final Folder folder, final int i, final JSONArray array, final Command callback) {
932
        if (i < array.size()) {
933
            JSONObject o = array.get(i).isObject();
934
            if (o != null && !o.containsKey("subdir")) {
935
                JSONString name = o.get("name").isString();
936
                String path = "/" + folder.getContainer() + "/" + name.stringValue();
937
                DeleteRequest delete = new DeleteRequest(getApiPath(), folder.getOwner(), URL.encode(path)) {
938
                    @Override
939
                    public void onSuccess(Resource result) {
940
                        deleteObject(folder, i + 1, array, callback);
941
                    }
942

  
943
                    @Override
944
                    public void onError(Throwable t) {
945
                        GWT.log("", t);
946
						setError(t);
947
                        displayError("System error unable to delete folder: " + t.getMessage());
948
                        deleteObject(folder, i + 1, array, callback);
949
                    }
950

  
951
    				@Override
952
    				protected void onUnauthorized(Response response) {
953
    					sessionExpired();
954
    				}
955
                };
956
                delete.setHeader("X-Auth-Token", getToken());
957
                Scheduler.get().scheduleDeferred(delete);
958
            }
959
            else if (o != null) {
960
                String subdir = o.get("subdir").isString().stringValue();
961
                subdir = subdir.substring(0, subdir.length() - 1);
962
                String path = getApiPath() + folder.getOwner() + "/" + folder.getContainer() + "?format=json&delimiter=/&prefix=" + URL.encodeQueryString(subdir) + "&t=" + System.currentTimeMillis();
963
                RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, path);
964
                builder.setHeader("X-Auth-Token", getToken());
965
                try {
966
                    builder.sendRequest("", new RequestCallback() {
967
                        @Override
968
                        public void onResponseReceived(Request request, Response response) {
969
                            if (response.getStatusCode() == Response.SC_OK) {
970
                                JSONValue json = JSONParser.parseStrict(response.getText());
971
                                JSONArray array2 = json.isArray();
972
                                if (array2 != null) {
973
                                    int l = array.size();
974
                                    for (int j=0; j<array2.size(); j++) {
975
                                        array.set(l++, array2.get(j));
976
                                    }
977
                                }
978
                                deleteObject(folder, i + 1, array, callback);
979
                            }
980
                        }
981

  
982
                        @Override
983
                        public void onError(Request request, Throwable exception) {
984
                        	setError(exception);
985
                            displayError("System error unable to delete folder: " + exception.getMessage());
986
                        }
987
                    });
988
                }
989
                catch (RequestException e) {
990
                }
991
            }
992
        }
993
        else {
994
        	if (folder.isContainer()) {
995
        		updateFolder(folder, true, new Command() {
903
        String path = "/" + folder.getContainer() + "/" + folder.getPrefix() + "?delimiter=/" + "&t=" + System.currentTimeMillis();
904
        DeleteRequest deleteFolder = new DeleteRequest(getApiPath(), folder.getOwner(), path) {
905
			
906
			@Override
907
			protected void onUnauthorized(Response response) {
908
				sessionExpired();
909
			}
910
			
911
			@Override
912
			public void onSuccess(Resource result) {
913
                updateFolder(folder.getParent(), true, new Command() {
996 914
					
997 915
					@Override
998 916
					public void execute() {
917
						folderTreeSelectionModel.setSelected(folder.getParent(), true);
999 918
						updateStatistics();
1000 919
						if (callback != null)
1001 920
							callback.execute();
1002 921
					}
1003
				}, false);
1004
        		return;
1005
        	}
1006
            String path = folder.getUri();
1007
            DeleteRequest deleteFolder = new DeleteRequest(getApiPath(), getUsername(), URL.encode(path)) {
1008
                @Override
1009
                public void onSuccess(Resource result) {
1010
                    updateFolder(folder.getParent(), true, new Command() {
1011
						
1012
						@Override
1013
						public void execute() {
1014
							folderTreeSelectionModel.setSelected(folder.getParent(), true);
1015
							updateStatistics();
1016
							if (callback != null)
1017
								callback.execute();
1018
						}
1019
					}, true);
1020
                }
1021

  
1022
                @Override
1023
                public void onError(Throwable t) {
1024
                    GWT.log("", t);
1025
					setError(t);
1026
                    if (t instanceof RestException) {
1027
                    	if (((RestException) t).getHttpStatusCode() != Response.SC_NOT_FOUND)
1028
                    		displayError("Unable to delete folder: "+((RestException) t).getHttpStatusText());
1029
                    	else
1030
                    		onSuccess(null);
1031
                    }
1032
                    else
1033
                        displayError("System error unable to delete folder: " + t.getMessage());
922
				}, true);
923
			}
924
			
925
			@Override
926
			public void onError(Throwable t) {
927
                GWT.log("", t);
928
				setError(t);
929
                if (t instanceof RestException) {
930
                	if (((RestException) t).getHttpStatusCode() != Response.SC_NOT_FOUND)
931
                		displayError("Unable to delete folder: "+((RestException) t).getHttpStatusText());
932
                	else
933
                		onSuccess(null);
1034 934
                }
1035

  
1036
				@Override
1037
				protected void onUnauthorized(Response response) {
1038
					sessionExpired();
1039
				}
1040
            };
1041
            deleteFolder.setHeader("X-Auth-Token", getToken());
1042
            Scheduler.get().scheduleDeferred(deleteFolder);
1043
        }
935
                else
936
                    displayError("System error unable to delete folder: " + t.getMessage());
937
			}
938
		};
939
		deleteFolder.setHeader("X-Auth-Token", getToken());
940
		Scheduler.get().scheduleDeferred(deleteFolder);
1044 941
    }
1045 942

  
1046 943
    public FolderTreeView getFolderTreeView() {

Also available in: Unified diff