Revision 2d0e60ee src/gr/grnet/pithos/web/client/othersharedtree/OtherSharedTreeViewModel.java

b/src/gr/grnet/pithos/web/client/othersharedtree/OtherSharedTreeViewModel.java
111 111
    protected Map<String, ListDataProvider<Folder>> userDataProviderMap = new HashMap<String, ListDataProvider<Folder>>();
112 112
    private Map<Folder, ListDataProvider<Folder>> dataProviderMap = new HashMap<Folder, ListDataProvider<Folder>>();
113 113
    
114
    protected Map<String, Set<File>> sharedFiles = new HashMap<String, Set<File>>();
115

  
116 114
    protected SingleSelectionModel<Folder> selectionModel;
117 115

  
118 116
    public OtherSharedTreeViewModel(Pithos _app, SingleSelectionModel<Folder> selectionModel) {
......
124 122
    public <T> NodeInfo<?> getNodeInfo(T value) {
125 123
        if (value == null) {
126 124
            rootDataProvider.getList().add(treeTitle);
127
            final SingleSelectionModel<String> selectionModel2 = new SingleSelectionModel<String>();
128
            selectionModel2.addSelectionChangeHandler(new Handler() {
129

  
130
                @Override
131
                public void onSelectionChange(SelectionChangeEvent event) {
132
                    if (selectionModel2.getSelectedObject() != null) {
133
                    	app.deselectOthers(app.getOtherSharedTreeView(), selectionModel2);
134
                    	app.applyPermissions(null);
135
                    	app.showFiles(new HashSet<File>());
136
    					app.showRelevantToolbarButtons();
137
                    }
138
    				else {
139
    					if (app.getSelectedTree().equals(app.getOtherSharedTreeView()) && app.getOtherSharedTreeView().getSelection() == null)
140
    						app.setSelectedTree(null);
141
    					if (app.getSelectedTree() == null)
142
    						app.showRelevantToolbarButtons();
143
    				}
144
                }
145
            });
146
            app.addSelectionModel(selectionModel2);
147 125
            return new DefaultNodeInfo<String>(rootDataProvider, new TextCell(new SafeHtmlRenderer<String>() {
148 126
                @Override
149 127
                public SafeHtml render(String object) {
......
158 136
                    builder.appendHtmlConstant(html).appendHtmlConstant("&nbsp;");
159 137
                    builder.append(OtherSharedTreeView.Templates.INSTANCE.nameSpan(object));
160 138
                }
161
            }),  selectionModel2, null);
139
            }),  null, null);
162 140
        }
163 141
        else if (value instanceof String) {
164 142
        	if (value.equals(treeTitle)) {
165 143
	        	fetchSharingUsers(null);
166
	            final SingleSelectionModel<String> selectionModel3 = new SingleSelectionModel<String>();
167
	            selectionModel3.addSelectionChangeHandler(new Handler() {
168

  
169
	                @Override
170
	                public void onSelectionChange(SelectionChangeEvent event) {
171
	                    if (selectionModel3.getSelectedObject() != null) {
172
	                    	app.deselectOthers(app.getOtherSharedTreeView(), selectionModel3);
173
	                    	app.applyPermissions(null);
174
	                    	String username = selectionModel3.getSelectedObject();
175
	            			if (userDataProviderMap.get(username) == null) {
176
	            				userDataProviderMap.put(username, new ListDataProvider<Folder>());
177
	            			}
178
	                    	fetchSharedFiles(username, userDataProviderMap.get(username));
179
	    					app.showRelevantToolbarButtons();
180
	                    }
181
	    				else {
182
	    					if (app.getSelectedTree().equals(app.getOtherSharedTreeView()) && app.getOtherSharedTreeView().getSelection() == null)
183
	    						app.setSelectedTree(null);
184
	    					if (app.getSelectedTree() == null)
185
	    						app.showRelevantToolbarButtons();
186
	    				}
187
	                }
188
	            });
189
	            app.addSelectionModel(selectionModel3);
190 144
	            return new DefaultNodeInfo<String>(userLevelDataProvider, new TextCell(new SafeHtmlRenderer<String>() {
191 145

  
192 146
					@Override
......
202 156
	                    builder.appendHtmlConstant(html).appendHtmlConstant("&nbsp;");
203 157
	                    builder.append(OtherSharedTreeView.Templates.INSTANCE.nameSpan(object));
204 158
					}
205
				}), selectionModel3, null);
159
				}), null, null);
206 160
        	}
207 161
			String username = (String) value;
208 162
			if (userDataProviderMap.get(username) == null) {
......
229 183
            public void onSuccess(final SharingUsers _result) {
230 184
                userLevelDataProvider.getList().clear();
231 185
                userLevelDataProvider.getList().addAll(_result.getUsers());
232
                for (String name : _result.getUsers()) {
233
                	sharedFiles.put(name, new HashSet<File>());
234
                }
235 186
                Iterator<String> iter = _result.getUsers().iterator();
236 187
                fetchSharedContainers(iter, callback);
237 188
            }
......
332 283
		Scheduler.get().scheduleDeferred(getUserSharedContainers);
333 284
	}
334 285

  
335
	protected void fetchSharedFiles(final String username, final ListDataProvider<Folder> dataProvider) {
336
		GetRequest<AccountResource> getUserSharedContainers = new GetRequest<AccountResource>(AccountResource.class, app.getApiPath(), username, "?format=json") {
337

  
338
			@Override
339
			public void onSuccess(AccountResource _result) {
340
		    	final ListDataProvider<Folder> tempProvider = new ListDataProvider<Folder>();
341
				Iterator<Folder> iter = _result.getContainers().iterator();
342
				sharedFiles.get(username).clear();
343
				fetchFolder(username, iter, tempProvider, new Command() {
344
					
345
					@Override
346
					public void execute() {
347
						dataProvider.getList().clear();
348
						dataProvider.getList().addAll(tempProvider.getList());
349
						app.showFiles(sharedFiles.get(username));
350
					}
351
				});
352
			}
353

  
354
			@Override
355
			public void onError(Throwable t) {
356
                GWT.log("Error getting account", t);
357
				app.setError(t);
358
                if (t instanceof RestException)
359
                    app.displayError("Error getting account: " + ((RestException) t).getHttpStatusText());
360
                else
361
                    app.displayError("System error fetching user data: " + t.getMessage());
362
			}
363

  
364
			@Override
365
			protected void onUnauthorized(Response response) {
366
				app.sessionExpired();
367
			}
368
		};
369
		getUserSharedContainers.setHeader("X-Auth-Token", app.getToken());
370
		Scheduler.get().scheduleDeferred(getUserSharedContainers);
371
	}
372

  
373 286
	protected void fetchFolder(final String username, final Iterator<Folder> iter, final ListDataProvider<Folder> dataProvider, final Command callback) {
374 287
        if (iter.hasNext()) {
375 288
            final Folder f = iter.next();
......
378 291
            GetRequest<Folder> getFolder = new GetRequest<Folder>(Folder.class, app.getApiPath(), username, path, f) {
379 292
                @Override
380 293
                public void onSuccess(Folder _result) {
381
                	if (!_result.isShared() && !_result.isContainer()) {
382
                		for (File file : _result.getFiles()) {
383
                			if (file.isSharedOrPublished())
384
                				sharedFiles.get(username).add(file);
385
                		}
386
	                	Iterator<Folder> iter2 = _result.getSubfolders().iterator();
387
	                	fetchFolder(username, iter2, dataProvider, new Command() {
388
							
389
							@Override
390
							public void execute() {
391
			                    fetchFolder(username, iter, dataProvider, callback);
392
							}
393
						});
394
                	}
395
                	else {
396
                		dataProvider.getList().add(_result);
397
	                    fetchFolder(username, iter, dataProvider, callback);
398
                	}
294
               		dataProvider.getList().add(_result);
295
                    fetchFolder(username, iter, dataProvider, callback);
399 296
                }
400 297

  
401 298
                @Override

Also available in: Unified diff