Revision 4eaecbac

b/src/gr/grnet/pithos/web/client/FileContextMenu.java
193 193
        boolean canWrite = true;
194 194
        if (selectedFolder != null) {
195 195
        	permissions = selectedFolder.getPermissions().get(app.getUserID());
196
        	canWrite = selectedFolder.getOwner().equals(app.getUserID()) || (permissions!= null && permissions[1] != null && permissions[1]);
196
        	canWrite = selectedFolder.getOwnerID().equals(app.getUserID()) || (permissions!= null && permissions[1] != null && permissions[1]);
197 197
		}
198 198
        else {
199 199
        	for (File f : selectedFiles) {
b/src/gr/grnet/pithos/web/client/FileUploadDialog.java
200 200
					FilesAdded: function(up, files) {
201 201
						var api = app.@gr.grnet.pithos.web.client.Pithos::getApiPath()();
202 202
						var folder = app.@gr.grnet.pithos.web.client.Pithos::getUploadFolder()();
203
						var owner = folder.@gr.grnet.pithos.web.client.foldertree.Folder::getOwner()();
203
						var owner = folder.@gr.grnet.pithos.web.client.foldertree.Folder::getOwnerID()();
204 204
						var uri = folder.@gr.grnet.pithos.web.client.foldertree.Folder::getUri()();
205 205
						var path = api + owner + uri;
206 206
						for (var j=0; j<files.length; j++)
b/src/gr/grnet/pithos/web/client/FolderContextMenu.java
83 83
        MenuBar contextMenu = new MenuBar(true);
84 84

  
85 85
        Boolean[] permissions = folder.getPermissions().get(app.getUserID());
86
    	boolean canWrite = folder.getOwner().equals(app.getUserID()) || (permissions!= null && permissions[1] != null && permissions[1]);
86
    	boolean canWrite = folder.getOwnerID().equals(app.getUserID()) || (permissions!= null && permissions[1] != null && permissions[1]);
87 87
    	boolean isFolderTreeSelected = selectedTree.equals(app.getFolderTreeView());
88 88
    	boolean otherSharedTreeSelected = selectedTree.equals(app.getOtherSharedTreeView());
89 89
    	boolean mysharedTreeSelected = selectedTree.equals(app.getMySharedTreeView());
b/src/gr/grnet/pithos/web/client/FolderPermissionsDialog.java
115 115

  
116 116
        VerticalPanel permPanel = new VerticalPanel();
117 117
        FilePermissionsDialog.Images images = GWT.create(FilePermissionsDialog.Images.class);
118
        permList = new PermissionsList(images, folder.getPermissions(), folder.getOwner(), false, null);
118
        permList = new PermissionsList(images, folder.getPermissions(), folder.getOwnerID(), false, null);
119 119
        permPanel.add(permList);
120 120

  
121 121
        HorizontalPanel permButtons = new HorizontalPanel();
......
215 215

  
216 216
	protected void updateMetadata(final String path, final Map<String, Boolean[]> newPermissions) {
217 217
        if (newPermissions != null) {
218
            PostRequest updateFolder = new PostRequest(app.getApiPath(), folder.getOwner(), path) {
218
            PostRequest updateFolder = new PostRequest(app.getApiPath(), folder.getOwnerID(), path) {
219 219
                @Override
220 220
                public void onSuccess(Resource result) {
221 221
                    app.updateFolder(folder.getParent(), false, new Command() {
......
234 234
                    if (t instanceof RestException) {
235 235
                    	if (((RestException) t).getHttpStatusCode() == Response.SC_NOT_FOUND) { //Probably a virtual folder
236 236
                            final String path1 = folder.getUri();
237
                            PutRequest newFolder = new PutRequest(app.getApiPath(), folder.getOwner(), path1) {
237
                            PutRequest newFolder = new PutRequest(app.getApiPath(), folder.getOwnerID(), path1) {
238 238
                                @Override
239 239
                                public void onSuccess(Resource result) {
240 240
                                	updateMetadata(path, newPermissions);
b/src/gr/grnet/pithos/web/client/FolderPropertiesDialog.java
34 34
 */
35 35
package gr.grnet.pithos.web.client;
36 36

  
37
import gr.grnet.pithos.web.client.foldertree.Folder;
38
import gr.grnet.pithos.web.client.rest.PutRequest;
39
import gr.grnet.pithos.web.client.rest.RestException;
40

  
41 37
import com.google.gwt.core.client.GWT;
42 38
import com.google.gwt.core.client.Scheduler;
43 39
import com.google.gwt.dom.client.NativeEvent;
44
import com.google.gwt.event.dom.client.ChangeEvent;
45
import com.google.gwt.event.dom.client.ChangeHandler;
46
import com.google.gwt.event.dom.client.ClickEvent;
47
import com.google.gwt.event.dom.client.ClickHandler;
48
import com.google.gwt.event.dom.client.KeyCodes;
49
import com.google.gwt.event.dom.client.KeyDownEvent;
40
import com.google.gwt.event.dom.client.*;
50 41
import com.google.gwt.http.client.Response;
51 42
import com.google.gwt.i18n.client.DateTimeFormat;
52 43
import com.google.gwt.user.client.Command;
53 44
import com.google.gwt.user.client.Event.NativePreviewEvent;
54
import com.google.gwt.user.client.ui.Anchor;
55
import com.google.gwt.user.client.ui.Button;
56
import com.google.gwt.user.client.ui.DialogBox;
57
import com.google.gwt.user.client.ui.FlexTable;
58
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
59
import com.google.gwt.user.client.ui.Label;
60
import com.google.gwt.user.client.ui.TextBox;
61
import com.google.gwt.user.client.ui.VerticalPanel;
45
import com.google.gwt.user.client.ui.*;
46
import gr.grnet.pithos.web.client.foldertree.Folder;
47
import gr.grnet.pithos.web.client.rest.PutRequest;
48
import gr.grnet.pithos.web.client.rest.RestException;
62 49

  
63 50
/**
64 51
 * The 'Folder properties' dialog box implementation.
......
67 54

  
68 55
    protected Pithos app;
69 56

  
70
	/**
71
	 * The widget that holds the folderName of the folder.
72
	 */
73
	TextBox folderName = new TextBox();
57
    /**
58
     * The widget that holds the folderName of the folder.
59
     */
60
    TextBox folderName = new TextBox();
74 61

  
75
	/**
76
	 * A flag that denotes whether the dialog will be used to create or modify a
77
	 * folder.
78
	 */
79
	private final boolean create;
62
    /**
63
     * A flag that denotes whether the dialog will be used to create or modify a
64
     * folder.
65
     */
66
    private final boolean create;
80 67

  
81
	final Folder folder;
68
    final Folder folder;
82 69

  
83
	final VerticalPanel inner;
70
    final VerticalPanel inner;
84 71

  
85
	/**
86
	 * The widget's constructor.
87
	 */
88
	public FolderPropertiesDialog(final Pithos app, boolean _create,  Folder selected) {
72
    /**
73
     * The widget's constructor.
74
     */
75
    public FolderPropertiesDialog(final Pithos app, boolean _create, Folder selected) {
89 76
        this.app = app;
90
		Anchor close = new Anchor("close");
91
		close.addStyleName("close");
92
		close.addClickHandler(new ClickHandler() {
93
			
94
			@Override
95
			public void onClick(ClickEvent event) {
96
				hide();
97
			}
98
		});
99

  
100
		setGlassEnabled(true);
101
		setStyleName("pithos-DialogBox");
102

  
103
		// Enable IE selection for the dialog (must disable it upon closing it)
104
		Pithos.enableIESelection();
105

  
106
		create = _create;
107
		
108
		folder = selected;
109

  
110
		// Use this opportunity to set the dialog's caption.
111
		if (create)
112
			setText("Create folder");
113
		else
114
			setText("Folder properties");
115

  
116
		// Outer contains inner and buttons
117
		VerticalPanel outer = new VerticalPanel();
118
		outer.add(close);
119
		// Inner contains generalPanel and permPanel
120
		inner = new VerticalPanel();
121
		inner.addStyleName("inner");
122

  
123
		VerticalPanel generalPanel = new VerticalPanel();
77
        Anchor close = new Anchor("close");
78
        close.addStyleName("close");
79
        close.addClickHandler(new ClickHandler() {
80

  
81
            @Override
82
            public void onClick(ClickEvent event) {
83
                hide();
84
            }
85
        });
86

  
87
        setGlassEnabled(true);
88
        setStyleName("pithos-DialogBox");
89

  
90
        // Enable IE selection for the dialog (must disable it upon closing it)
91
        Pithos.enableIESelection();
92

  
93
        create = _create;
94

  
95
        folder = selected;
96

  
97
        // Use this opportunity to set the dialog's caption.
98
        if(create) {
99
            setText("Create folder");
100
        }
101
        else {
102
            setText("Folder properties");
103
        }
104

  
105
        // Outer contains inner and buttons
106
        VerticalPanel outer = new VerticalPanel();
107
        outer.add(close);
108
        // Inner contains generalPanel and permPanel
109
        inner = new VerticalPanel();
110
        inner.addStyleName("inner");
111

  
112
        VerticalPanel generalPanel = new VerticalPanel();
124 113
        FlexTable generalTable = new FlexTable();
125 114
        generalTable.setText(0, 0, "Name");
126 115
        generalTable.setText(1, 0, "Parent");
127 116
        generalTable.setText(2, 0, "Creator");
128 117
        generalTable.setText(3, 0, "Last modified");
129 118

  
130
		folderName.setText(create ? "" : folder.getName());
119
        folderName.setText(create ? "" : folder.getName());
131 120
        folderName.setReadOnly(folder.isContainer() && !create);
132 121
        generalTable.setWidget(0, 1, folderName);
133 122

  
134 123
        final Label folderNameNote = new Label("Please note that slashes ('/') are not allowed in folder names.", true);
135
		folderNameNote.setVisible(false);
136
		folderNameNote.setStylePrimaryName("gss-readForAllNote");
137
		generalTable.setWidget(0, 2, folderNameNote);
138
		
139
        if (create)
124
        folderNameNote.setVisible(false);
125
        folderNameNote.setStylePrimaryName("gss-readForAllNote");
126
        generalTable.setWidget(0, 2, folderNameNote);
127

  
128
        if(create) {
140 129
            generalTable.setText(1, 1, folder.getName());
141
        else
130
        }
131
        else {
142 132
            generalTable.setText(1, 1, folder.getParent().getName());
143
        if (create)
144
        	generalTable.setText(2, 1, app.getCurrentUserDisplayNameOrID());
145
        else
146
        	generalTable.setText(2, 1, folder.getOwner());
133
        }
134
        if(create) {
135
            generalTable.setText(2, 1, app.getCurrentUserDisplayNameOrID());
136
        }
137
        else {
138
            final String ownerID = folder.getOwnerID();
139
            final String displayName = app.getUserDisplayNameByID(ownerID);
140
            final String ownerDisplayName;
141
            if(displayName == null) {
142
                // FIXME: Get the actual display name and do not use the id
143
                ownerDisplayName = ownerID;
144
            }
145
            else {
146
                ownerDisplayName = displayName;
147
            }
148
            generalTable.setText(2, 1, ownerDisplayName);
149
        }
147 150
        DateTimeFormat formatter = DateTimeFormat.getFormat("d/M/yyyy h:mm a");
148
        if(folder.getLastModified() != null)
151
        if(folder.getLastModified() != null) {
149 152
            generalTable.setText(3, 1, formatter.format(folder.getLastModified()));
153
        }
150 154
        generalTable.getFlexCellFormatter().setStyleName(0, 0, "props-labels");
151 155
        generalTable.getFlexCellFormatter().setStyleName(1, 0, "props-labels");
152 156
        generalTable.getFlexCellFormatter().setStyleName(2, 0, "props-labels");
......
161 165

  
162 166
        outer.add(inner);
163 167

  
164
		// Create the 'Create/Update' button, along with a listener that hides the dialog
165
		// when the button is clicked and quits the application.
166
		String okLabel;
167
		if (create)
168
			okLabel = "Create";
169
		else
170
			okLabel = "Update";
171
		final Button ok = new Button(okLabel, new ClickHandler() {
172
			@Override
173
			public void onClick(ClickEvent event) {
174
				createOrUpdateFolder();
175
				closeDialog();
176
			}
177
		});
178
		ok.addStyleName("button");
179
		outer.add(ok);
168
        // Create the 'Create/Update' button, along with a listener that hides the dialog
169
        // when the button is clicked and quits the application.
170
        String okLabel;
171
        if(create) {
172
            okLabel = "Create";
173
        }
174
        else {
175
            okLabel = "Update";
176
        }
177
        final Button ok = new Button(okLabel, new ClickHandler() {
178
            @Override
179
            public void onClick(ClickEvent event) {
180
                createOrUpdateFolder();
181
                closeDialog();
182
            }
183
        });
184
        ok.addStyleName("button");
185
        outer.add(ok);
180 186
        outer.setCellHorizontalAlignment(inner, HasHorizontalAlignment.ALIGN_CENTER);
181 187

  
182 188
        folderName.addChangeHandler(new ChangeHandler() {
183
			
184
			@Override
185
			public void onChange(ChangeEvent event) {
186
				if(folderName.getText().contains("/")) {
187
					folderNameNote.setVisible(true);
188
					ok.setEnabled(false);
189
				}
190
				else {
191
					folderNameNote.setVisible(false);
192
					ok.setEnabled(true);
193
				}
194
			}
195
		});
189

  
190
            @Override
191
            public void onChange(ChangeEvent event) {
192
                if(folderName.getText().contains("/")) {
193
                    folderNameNote.setVisible(true);
194
                    ok.setEnabled(false);
195
                }
196
                else {
197
                    folderNameNote.setVisible(false);
198
                    ok.setEnabled(true);
199
                }
200
            }
201
        });
196 202

  
197 203
        setWidget(outer);
198
	}
199

  
200
	@Override
201
	public void center() {
202
		super.center();
203
		folderName.setFocus(true);
204
	}
205

  
206
	@Override
207
	protected void onPreviewNativeEvent(NativePreviewEvent preview) {
208
		super.onPreviewNativeEvent(preview);
209

  
210
		NativeEvent evt = preview.getNativeEvent();
211
		if (evt.getType().equals(KeyDownEvent.getType().getName()))
212
			// Use the popup's key preview hooks to close the dialog when either
213
			// enter or escape is pressed.
214
			switch (evt.getKeyCode()) {
215
				case KeyCodes.KEY_ENTER:
216
					createOrUpdateFolder();
204
    }
205

  
206
    @Override
207
    public void center() {
208
        super.center();
209
        folderName.setFocus(true);
210
    }
211

  
212
    @Override
213
    protected void onPreviewNativeEvent(NativePreviewEvent preview) {
214
        super.onPreviewNativeEvent(preview);
215

  
216
        NativeEvent evt = preview.getNativeEvent();
217
        if(evt.getType().equals(KeyDownEvent.getType().getName()))
218
        // Use the popup's key preview hooks to close the dialog when either
219
        // enter or escape is pressed.
220
        {
221
            switch(evt.getKeyCode()) {
222
                case KeyCodes.KEY_ENTER:
223
                    createOrUpdateFolder();
224
                    closeDialog();
225
                    break;
226
                case KeyCodes.KEY_ESCAPE:
217 227
                    closeDialog();
218
					break;
219
				case KeyCodes.KEY_ESCAPE:
220
					closeDialog();
221
					break;
222
			}
223
	}
224

  
225

  
226
	/**
227
	 * Enables IE selection prevention and hides the dialog
228
	 * (we disable the prevention on creation of the dialog)
229
	 */
230
	public void closeDialog() {
231
		Pithos.preventIESelection();
232
		hide();
233
	}
234

  
235
	/**
236
	 * Generate an RPC request to create a new folder.
237
	 */
238
	private void createFolder() {
239
		String name = folderName.getText().trim();
240
		if (name.length() == 0)
241
			return;
228
                    break;
229
            }
230
        }
231
    }
232

  
233

  
234
    /**
235
     * Enables IE selection prevention and hides the dialog
236
     * (we disable the prevention on creation of the dialog)
237
     */
238
    public void closeDialog() {
239
        Pithos.preventIESelection();
240
        hide();
241
    }
242

  
243
    /**
244
     * Generate an RPC request to create a new folder.
245
     */
246
    private void createFolder() {
247
        String name = folderName.getText().trim();
248
        if(name.length() == 0) {
249
            return;
250
        }
242 251
        String path = folder.getUri() + "/" + name;
243
        PutRequest createFolder = new PutRequest(app.getApiPath(), folder.getOwner(), path) {
252
        PutRequest createFolder = new PutRequest(app.getApiPath(), folder.getOwnerID(), path) {
244 253
            @Override
245 254
            public void onSuccess(Resource result) {
246 255
                app.updateFolder(folder, true, new Command() {
247
					
248
					@Override
249
					public void execute() {
250
						app.updateStatistics();
251
					}
252
				}, true);
256

  
257
                    @Override
258
                    public void execute() {
259
                        app.updateStatistics();
260
                    }
261
                }, true);
253 262
            }
254 263

  
255 264
            @Override
256 265
            public void onError(Throwable t) {
257
				GWT.log("", t);
258
				app.setError(t);
259
				if (t instanceof RestException) {
260
					app.displayError("Unable to create folder:" + ((RestException) t).getHttpStatusText());
261
				}
262
				else
263
					app.displayError("System error creating folder:" + t.getMessage());
266
                GWT.log("", t);
267
                app.setError(t);
268
                if(t instanceof RestException) {
269
                    app.displayError("Unable to create folder:" + ((RestException) t).getHttpStatusText());
270
                }
271
                else {
272
                    app.displayError("System error creating folder:" + t.getMessage());
273
                }
264 274
            }
265 275

  
266
			@Override
267
			protected void onUnauthorized(Response response) {
268
				app.sessionExpired();
269
			}
270
       };
276
            @Override
277
            protected void onUnauthorized(Response response) {
278
                app.sessionExpired();
279
            }
280
        };
271 281
        createFolder.setHeader("X-Auth-Token", app.getUserToken());
272 282
        createFolder.setHeader("Accept", "*/*");
273 283
        createFolder.setHeader("Content-Length", "0");
274 284
        createFolder.setHeader("Content-Type", "application/directory");
275 285
        Scheduler.get().scheduleDeferred(createFolder);
276
	}
277

  
278
	/**
279
	 * Upon closing the dialog by clicking OK or pressing ENTER this method does
280
	 * the actual work of modifying folder properties or creating a new Folder
281
	 * depending on the value of the create field
282
	 */
283
	protected void createOrUpdateFolder() {
284
		if (create)
285
			createFolder();
286
		else
287
			updateFolder();
288

  
289
	}
290

  
291
	private void updateFolder() {
286
    }
287

  
288
    /**
289
     * Upon closing the dialog by clicking OK or pressing ENTER this method does
290
     * the actual work of modifying folder properties or creating a new Folder
291
     * depending on the value of the create field
292
     */
293
    protected void createOrUpdateFolder() {
294
        if(create) {
295
            createFolder();
296
        }
297
        else {
298
            updateFolder();
299
        }
300

  
301
    }
302

  
303
    private void updateFolder() {
292 304
        final String newName = folderName.getText().trim();
293
        if (newName.length() == 0)
294
        	return;
295
        if (!folder.isContainer() && !folder.getName().equals(newName)) {
305
        if(newName.length() == 0) {
306
            return;
307
        }
308
        if(!folder.isContainer() && !folder.getName().equals(newName)) {
296 309
            final String path = folder.getParent().getUri() + "/" + newName;
297
            app.copyFolder(folder, folder.getOwner(), path, true, new Command() {
298
				
299
				@Override
300
				public void execute() {
310
            app.copyFolder(folder, folder.getOwnerID(), path, true, new Command() {
311

  
312
                @Override
313
                public void execute() {
301 314
                    app.updateFolder(folder.getParent(), false, new Command() {
302
            			
303
            			@Override
304
            			public void execute() {
305
            				app.updateMySharedRoot();
306
            			}
307
            		}, true);
308
				}
309
			});
315

  
316
                        @Override
317
                        public void execute() {
318
                            app.updateMySharedRoot();
319
                        }
320
                    }, true);
321
                }
322
            });
310 323
        }
311
        else
324
        else {
312 325
            app.updateFolder(folder.getParent(), false, new Command() {
313
    			
314
    			@Override
315
    			public void execute() {
316
    				app.updateMySharedRoot();
317
    			}
318
    		}, true);
319
	}
326

  
327
                @Override
328
                public void execute() {
329
                    app.updateMySharedRoot();
330
                }
331
            }, true);
332
        }
333
    }
320 334
}
b/src/gr/grnet/pithos/web/client/Pithos.java
505 505
                    return true;
506 506
                }
507 507

  
508
                HeadRequest<Folder> head = new HeadRequest<Folder>(Folder.class, getApiPath(), f.getOwner(), "/" + f.getContainer()) {
508
                HeadRequest<Folder> head = new HeadRequest<Folder>(Folder.class, getApiPath(), f.getOwnerID(), "/" + f.getContainer()) {
509 509

  
510 510
                    @Override
511 511
                    public void onSuccess(Folder _result) {
......
583 583
            }
584 584
            else {
585 585
                Boolean[] perms = f.getPermissions().get(userID);
586
                if(f.getOwner().equals(userID) || (perms != null && perms[1] != null && perms[1])) {
586
                if(f.getOwnerID().equals(userID) || (perms != null && perms[1] != null && perms[1])) {
587 587
                    upload.setEnabled(true);
588 588
                    enableUploadArea();
589 589
                }
......
954 954
        final PleaseWaitPopup pwp = new PleaseWaitPopup();
955 955
        pwp.center();
956 956
        String path = "/" + folder.getContainer() + "/" + folder.getPrefix() + "?delimiter=/" + "&t=" + System.currentTimeMillis();
957
        DeleteRequest deleteFolder = new DeleteRequest(getApiPath(), folder.getOwner(), path) {
957
        DeleteRequest deleteFolder = new DeleteRequest(getApiPath(), folder.getOwnerID(), path) {
958 958

  
959 959
            @Override
960 960
            protected void onUnauthorized(Response response) {
......
1075 1075
        copyFolder.setHeader("Accept", "*/*");
1076 1076
        copyFolder.setHeader("Content-Length", "0");
1077 1077
        copyFolder.setHeader("Content-Type", "application/directory");
1078
        if(!f.getOwner().equals(targetUsername)) {
1079
            copyFolder.setHeader("X-Source-Account", f.getOwner());
1078
        if(!f.getOwnerID().equals(targetUsername)) {
1079
            copyFolder.setHeader("X-Source-Account", f.getOwnerID());
1080 1080
        }
1081 1081
        if(move) {
1082 1082
            copyFolder.setHeader("X-Move-From", URL.encodePathSegment(f.getUri()));
......
1260 1260
            }
1261 1261
        }
1262 1262
        else {
1263
            HeadRequest<Folder> headFolder = new HeadRequest<Folder>(Folder.class, getApiPath(), folder.getOwner(), folder.getUri(), folder) {
1263
            HeadRequest<Folder> headFolder = new HeadRequest<Folder>(Folder.class, getApiPath(), folder.getOwnerID(), folder.getUri(), folder) {
1264 1264

  
1265 1265
                @Override
1266 1266
                public void onSuccess(Folder _result) {
......
1274 1274
                    if(t instanceof RestException) {
1275 1275
                        if(((RestException) t).getHttpStatusCode() == Response.SC_NOT_FOUND) {
1276 1276
                            final String path = folder.getUri();
1277
                            PutRequest newFolder = new PutRequest(getApiPath(), folder.getOwner(), path) {
1277
                            PutRequest newFolder = new PutRequest(getApiPath(), folder.getOwnerID(), path) {
1278 1278
                                @Override
1279 1279
                                public void onSuccess(Resource _result) {
1280 1280
                                    scheduleFolderHeadCommand(folder, callback);
b/src/gr/grnet/pithos/web/client/Toolbar.java
79 79
				Folder folder = app.getSelectedTree().getSelection();
80 80
				if (folder != null) {
81 81
			        Boolean[] permissions = folder.getPermissions().get(app.getUserID());
82
			    	boolean canWrite = folder.getOwner().equals(app.getUserID()) || (permissions!= null && permissions[1] != null && permissions[1]);
82
			    	boolean canWrite = folder.getOwnerID().equals(app.getUserID()) || (permissions!= null && permissions[1] != null && permissions[1]);
83 83
			    	
84 84
			    	if (!folder.isInTrash() && canWrite)
85 85
			    		new NewFolderCommand(app, null, folder).execute();
......
99 99
				Folder folder = app.getSelectedTree().getSelection();
100 100
				if (folder != null) {
101 101
			        Boolean[] permissions = folder.getPermissions().get(app.getUserID());
102
			    	boolean canWrite = folder.getOwner().equals(app.getUserID()) || (permissions!= null && permissions[1] != null && permissions[1]);
102
			    	boolean canWrite = folder.getOwnerID().equals(app.getUserID()) || (permissions!= null && permissions[1] != null && permissions[1]);
103 103
			    	boolean isFolderTreeSelected = app.getSelectedTree().equals(app.getFolderTreeView());
104 104
			    	
105 105
			    	if (!folder.isInTrash() && canWrite && isFolderTreeSelected && !folder.isContainer())
......
168 168
					@Override
169 169
					public void execute() {
170 170
				        Boolean[] permissions = folder.getPermissions().get(app.getUserID());
171
				    	boolean canWrite = folder.getOwner().equals(app.getUserID()) || (permissions!= null && permissions[1] != null && permissions[1]);
171
				    	boolean canWrite = folder.getOwnerID().equals(app.getUserID()) || (permissions!= null && permissions[1] != null && permissions[1]);
172 172
				    	boolean isFolderTreeSelected = app.getSelectedTree().equals(app.getFolderTreeView());
173 173
				    	boolean otherSharedTreeSelected = app.getSelectedTree().equals(app.getOtherSharedTreeView());
174 174
				    	
b/src/gr/grnet/pithos/web/client/ToolsMenu.java
96 96

  
97 97
        if (folder != null) {
98 98
	        Boolean[] permissions = folder.getPermissions().get(app.getUserID());
99
	    	boolean canWrite = folder.getOwner().equals(app.getUserID()) || (permissions!= null && permissions[1] != null && permissions[1]);
99
	    	boolean canWrite = folder.getOwnerID().equals(app.getUserID()) || (permissions!= null && permissions[1] != null && permissions[1]);
100 100
	    	boolean isFolderTreeSelected = selectedTree.equals(app.getFolderTreeView());
101 101
	    	boolean isMysharedTreeSelected = app.isMySharedSelected();
102 102
	    	
......
135 135
			        	if (item instanceof List) {
136 136
			        		@SuppressWarnings("unchecked")
137 137
							List<File> _files = (List<File>) item;
138
			        		if (_files.get(0).getOwnerID().equals(folder.getOwner()))
138
			        		if (_files.get(0).getOwnerID().equals(folder.getOwnerID()))
139 139
			        			showPaste = true;
140 140
			        	}
141 141
			        	else {
142 142
			        		Folder f = (Folder) item;
143
			        		if (f.getOwner().equals(folder.getOwner()))
143
			        		if (f.getOwnerID().equals(folder.getOwnerID()))
144 144
			        			showPaste = true;
145 145
			        	}
146 146
			        	if (showPaste) {
b/src/gr/grnet/pithos/web/client/commands/PasteCommand.java
77 77
            final Folder tobeCopied = (Folder) clipboardItem;
78 78
            if (operation == Clipboard.COPY) {
79 79
            	String targetUri = folder.getUri() + "/" + tobeCopied.getName();
80
                app.copyFolder(tobeCopied, folder.getOwner(), targetUri, false, new Command() {
80
                app.copyFolder(tobeCopied, folder.getOwnerID(), targetUri, false, new Command() {
81 81
                    @Override
82 82
                    public void execute() {
83 83
                        app.getClipboard().clear();
......
93 93
            }
94 94
            else {
95 95
            	String targetUri = folder.getUri() + "/" + tobeCopied.getName();
96
                app.copyFolder(tobeCopied, folder.getOwner(), targetUri, true, new Command() {
96
                app.copyFolder(tobeCopied, folder.getOwnerID(), targetUri, true, new Command() {
97 97
                    @Override
98 98
                    public void execute() {
99 99
                        app.getClipboard().clear();
......
107 107
			List<File> tobeCopied = (List<File>) clipboardItem;
108 108
            Iterator<File> iter = tobeCopied.iterator();
109 109
            if (operation == Clipboard.COPY) {
110
                app.copyFiles(iter, folder.getOwner(), folder.getUri(), new Command() {
110
                app.copyFiles(iter, folder.getOwnerID(), folder.getUri(), new Command() {
111 111
                    @Override
112 112
                    public void execute() {
113 113
                        app.getClipboard().clear();
......
137 137
        if (iter.hasNext()) {
138 138
            File file = iter.next();
139 139
            String path = folder.getUri() + "/" + file.getName();
140
            PutRequest copyFile = new PutRequest(app.getApiPath(), folder.getOwner(), path) {
140
            PutRequest copyFile = new PutRequest(app.getApiPath(), folder.getOwnerID(), path) {
141 141
                @Override
142 142
                public void onSuccess(Resource result) {
143 143
                    moveFiles(iter, callback);
b/src/gr/grnet/pithos/web/client/foldertree/Folder.java
81 81

  
82 82
    private Set<File> files = new LinkedHashSet<File>();
83 83

  
84
    private String owner;
84
    private String ownerID;
85 85

  
86 86
    private Map<String, Boolean[]> permissions = new HashMap<String, Boolean[]>();
87 87

  
......
146 146
    }
147 147

  
148 148
    public void populate(String _owner, Response response) {
149
        this.owner = _owner;
149
        this.ownerID = _owner;
150 150
        String header = response.getHeader("Last-Modified");
151 151
        if (header != null)
152 152
			try {
......
224 224
            container = name;
225 225
            prefix = "";
226 226
        }
227
        this.owner = _owner;
227
        this.ownerID = _owner;
228 228

  
229 229
        inheritedPermissionsFrom = unmarshallString(o, "x_object_shared_by");
230 230
        String rawPermissions = unmarshallString(o, "x_object_sharing");
......
247 247
    public boolean equals(Object other) {
248 248
        if (other instanceof Folder) {
249 249
            Folder o = (Folder) other;
250
            return (owner == null ? true : owner.equals(o.getOwner())) 
250
            return (ownerID == null ? true : ownerID.equals(o.getOwnerID()))
251 251
            		&& (getUri().equals(o.getUri()));
252 252
        }
253 253
        return false;
......
286 286
        return permissions;
287 287
    }
288 288

  
289
    public String getOwner() {
290
        return owner;
289
    public String getOwnerID() {
290
        return ownerID;
291 291
    }
292 292

  
293 293
	public boolean isShared() {
b/src/gr/grnet/pithos/web/client/foldertree/FolderTreeViewModel.java
152 152
            final Folder f = iter.next();
153 153

  
154 154
            String path = "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + URL.encodeQueryString(f.getPrefix());
155
            GetRequest<Folder> getFolder = new GetRequest<Folder>(Folder.class, app.getApiPath(), f.getOwner(), path, f) {
155
            GetRequest<Folder> getFolder = new GetRequest<Folder>(Folder.class, app.getApiPath(), f.getOwnerID(), path, f) {
156 156
                @Override
157 157
                public void onSuccess(Folder _result) {
158 158
                    fetchFolder(iter, callback);
......
236 236

  
237 237
    public void fetchFolder(final Folder f, final ListDataProvider<Folder> dataProvider, final boolean showfiles, final Command callback) {
238 238
        String path = "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + URL.encodeQueryString(f.getPrefix());
239
        GetRequest<Folder> getFolder = new GetRequest<Folder>(Folder.class, app.getApiPath(), f.getOwner(), path, f) {
239
        GetRequest<Folder> getFolder = new GetRequest<Folder>(Folder.class, app.getApiPath(), f.getOwnerID(), path, f) {
240 240
            @Override
241 241
            public void onSuccess(final Folder _result) {
242 242
                if (showfiles)
b/src/gr/grnet/pithos/web/client/mysharedtree/MysharedTreeViewModel.java
170 170
            final Folder f = iter.next();
171 171

  
172 172
            String path = "/" + f.getContainer() + "?format=json&shared=&public=&delimiter=/&prefix=" + URL.encodeQueryString(f.getPrefix());
173
            GetRequest<Folder> getFolder = new GetRequest<Folder>(Folder.class, app.getApiPath(), f.getOwner(), path, f) {
173
            GetRequest<Folder> getFolder = new GetRequest<Folder>(Folder.class, app.getApiPath(), f.getOwnerID(), path, f) {
174 174
                @Override
175 175
                public void onSuccess(Folder _result) {
176 176
                    fetchFolder(iter, callback);
......
208 208

  
209 209
    public void fetchFolder(final Folder f, final boolean showfiles, final Command callback) {
210 210
        String path = "/" + f.getContainer() + "?format=json&shared=&public=" + URL.encodeQueryString(f.getPrefix());
211
        GetRequest<Folder> getFolder = new GetRequest<Folder>(Folder.class, app.getApiPath(), f.getOwner(), path, f) {
211
        GetRequest<Folder> getFolder = new GetRequest<Folder>(Folder.class, app.getApiPath(), f.getOwnerID(), path, f) {
212 212
            @Override
213 213
            public void onSuccess(final Folder _result) {
214 214
            	for (File file : _result.getFiles()) {
b/src/gr/grnet/pithos/web/client/othersharedtree/OtherSharedTreeViewModel.java
309 309

  
310 310
    public void fetchFolder(final Folder f, final ListDataProvider<Folder> dataProvider, final boolean showfiles, final Command callback) {
311 311
        String path = "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + URL.encodeQueryString(f.getPrefix());
312
        GetRequest<Folder> getFolder = new GetRequest<Folder>(Folder.class, app.getApiPath(), f.getOwner(), path, f) {
312
        GetRequest<Folder> getFolder = new GetRequest<Folder>(Folder.class, app.getApiPath(), f.getOwnerID(), path, f) {
313 313
            @Override
314 314
            public void onSuccess(final Folder _result) {
315 315
                if (showfiles)
316 316
                    app.showFiles(_result);
317 317
                Iterator<Folder> iter = _result.getSubfolders().iterator();
318
                fetchFolder(_result.getOwner(), iter, dataProvider, new Command() {
318
                fetchFolder(_result.getOwnerID(), iter, dataProvider, new Command() {
319 319
                    @Override
320 320
                    public void execute() {
321 321
                        dataProvider.getList().clear();

Also available in: Unified diff