Revision 56f9134b src/gr/grnet/pithos/web/client/mysharedtree/MysharedTreeViewModel.java

b/src/gr/grnet/pithos/web/client/mysharedtree/MysharedTreeViewModel.java
37 37

  
38 38
import gr.grnet.pithos.web.client.FolderContextMenu;
39 39
import gr.grnet.pithos.web.client.Pithos;
40
import gr.grnet.pithos.web.client.foldertree.AccountResource;
40 41
import gr.grnet.pithos.web.client.foldertree.File;
41 42
import gr.grnet.pithos.web.client.foldertree.Folder;
42 43
import gr.grnet.pithos.web.client.foldertree.FolderTreeView;
......
108 109

  
109 110
    private Map<Folder, ListDataProvider<Folder>> dataProviderMap = new HashMap<Folder, ListDataProvider<Folder>>();
110 111
    
111
    protected Set<File> sharedFiles = new HashSet<File>();
112

  
113 112
    protected SingleSelectionModel<Folder> selectionModel;
114 113

  
115 114
    public MysharedTreeViewModel(Pithos _app, SingleSelectionModel<Folder> selectionModel) {
......
122 121
        if (value == null) {
123 122
            ListDataProvider<String> rootDataProvider = new ListDataProvider<String>();
124 123
            rootDataProvider.getList().add("Shared by me");
125
            final SingleSelectionModel<String> selectionModel2 = new SingleSelectionModel<String>();
126
            selectionModel2.addSelectionChangeHandler(new Handler() {
127

  
128
                @Override
129
                public void onSelectionChange(SelectionChangeEvent event) {
130
                    if (selectionModel2.getSelectedObject() != null) {
131
                    	app.deselectOthers(app.getMySharedTreeView(), selectionModel2);
132
                    	app.applyPermissions(null);
133
                    	fetchSharedFiles(true);
134
    					app.showRelevantToolbarButtons();
135
                    }
136
    				else {
137
    					if (app.getSelectedTree().equals(app.getMySharedTreeView()) && app.getMySharedTreeView().getSelection() == null)
138
    						app.setSelectedTree(null);
139
    					if (app.getSelectedTree() == null)
140
    						app.showRelevantToolbarButtons();
141
    				}
142
                }
143
            });
144
            app.addSelectionModel(selectionModel2);
145 124
            return new DefaultNodeInfo<String>(rootDataProvider, new TextCell(new SafeHtmlRenderer<String>() {
146 125
                @Override
147 126
                public SafeHtml render(String object) {
......
156 135
                    builder.appendHtmlConstant(html).appendHtmlConstant("&nbsp;");
157 136
                    builder.append(MysharedTreeView.Templates.INSTANCE.nameSpan(object));
158 137
                }
159
            }),  selectionModel2, null);
138
            }),  null, null);
160 139
        }
161 140
        else if (value instanceof String) {
162 141
        	fetchSharedContainers(null);
......
173 152
        }
174 153
    }
175 154

  
176
	protected void fetchSharedFiles(final boolean showFiles) {
177
		sharedFiles.clear();
178
    	final List<Folder> containers = app.getAccount().getContainers();
179
    	final ListDataProvider<Folder> tempProvider = new ListDataProvider<Folder>();
180
    	Iterator<Folder> iter = containers.iterator();
181
    	fetchFolder(iter, tempProvider, new Command() {
182
			
183
			@Override
184
			public void execute() {
185
				firstLevelDataProvider.getList().clear();
186
				firstLevelDataProvider.getList().addAll(tempProvider.getList());
187
				if (showFiles)
188
					app.showFiles(sharedFiles);
189
			}
190
		});
191
	}
192

  
193 155
	private void fetchSharedContainers(final Command callback) {
194
    	final List<Folder> containers = app.getAccount().getContainers();
195
    	final ListDataProvider<Folder> tempProvider = new ListDataProvider<Folder>();
196
    	Iterator<Folder> iter = containers.listIterator();
197
    	fetchFolder(iter, tempProvider, new Command() {
198
			
156
        String path = "?format=json&shared=";
157
        GetRequest<AccountResource> getAccount = new GetRequest<AccountResource>(AccountResource.class, app.getApiPath(), app.getUsername(), path) {
158
            @Override
159
            public void onSuccess(final AccountResource _result) {
160
            	Iterator<Folder> iter = _result.getContainers().listIterator();
161
            	fetchFolder(iter, new Command() {
162
					
163
					@Override
164
					public void execute() {
165
						firstLevelDataProvider.getList().clear();
166
		                Folder t = null;
167
		                for (Folder c : _result.getContainers()) {
168
		                	if (c.isHome())
169
		                		firstLevelDataProvider.getList().add(0, c); //Pithos is always first
170
		                	else if (!c.isTrash())
171
		                		firstLevelDataProvider.getList().add(c);
172
		                }
173
						if (callback != null)
174
							callback.execute();
175
					}
176
				});
177
            }
178

  
179
            @Override
180
            public void onError(Throwable t) {
181
                GWT.log("Error getting account", t);
182
				app.setError(t);
183
                if (t instanceof RestException)
184
                    app.displayError("Error getting account: " + ((RestException) t).getHttpStatusText());
185
                else
186
                    app.displayError("System error fetching user data: " + t.getMessage());
187
            }
188

  
199 189
			@Override
200
			public void execute() {
201
				firstLevelDataProvider.getList().clear();
202
				firstLevelDataProvider.getList().addAll(tempProvider.getList());
203
				if (callback != null)
204
					callback.execute();
190
			protected void onUnauthorized(Response response) {
191
				app.sessionExpired();
205 192
			}
206
		});
193
        };
194
        getAccount.setHeader("X-Auth-Token", app.getToken());
195
        Scheduler.get().scheduleDeferred(getAccount);
207 196
	}
208 197

  
209 198
	@Override
......
223 212
		$wnd.console.log(msg);
224 213
	}-*/;
225 214

  
226
    protected void fetchFolder(final Iterator<Folder> iter, final ListDataProvider<Folder> dataProvider, final Command callback) {
215
    protected void fetchFolder(final Iterator<Folder> iter, final Command callback) {
227 216
        if (iter.hasNext()) {
228 217
            final Folder f = iter.next();
229 218

  
230
            String path = "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + URL.encodeQueryString(f.getPrefix());
219
            String path = "/" + f.getContainer() + "?format=json&shared=&delimiter=/&prefix=" + URL.encodeQueryString(f.getPrefix());
231 220
            GetRequest<Folder> getFolder = new GetRequest<Folder>(Folder.class, app.getApiPath(), f.getOwner(), path, f) {
232 221
                @Override
233 222
                public void onSuccess(Folder _result) {
234
                	if (!_result.isShared()) {
235
                		for (File file : _result.getFiles()) {
236
                			if (file.isSharedOrPublished())
237
                				sharedFiles.add(file);
238
                		}
239
	                	Iterator<Folder> iter2 = new ArrayList<Folder>(result.getSubfolders()).listIterator();
240
	                	fetchFolder(iter2, dataProvider, new Command() {
241
							
242
							@Override
243
							public void execute() {
244
			                    fetchFolder(iter, dataProvider, callback);
245
							}
246
						});
247
                	}
248
                	else {
249
                		dataProvider.getList().add(_result);
250
	                    fetchFolder(iter, dataProvider, callback);
251
                	}
223
                    fetchFolder(iter, callback);
252 224
                }
253 225

  
254 226
                @Override
......
286 258
    }
287 259

  
288 260
    public void fetchFolder(final Folder f, final ListDataProvider<Folder> dataProvider, final boolean showfiles) {
289
        String path = "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + URL.encodeQueryString(f.getPrefix());
261
        String path = "/" + f.getContainer() + "?format=json&shared=&delimiter=/&prefix=" + URL.encodeQueryString(f.getPrefix());
290 262
        GetRequest<Folder> getFolder = new GetRequest<Folder>(Folder.class, app.getApiPath(), f.getOwner(), path, f) {
291 263
            @Override
292 264
            public void onSuccess(final Folder _result) {
293 265
                if (showfiles)
294 266
                    app.showFiles(_result);
295
                Iterator<Folder> iter = _result.getSubfolders().iterator();
296
                fetchFolder(iter, dataProvider, new Command() {
267
                Iterator<Folder> iter = new ArrayList<Folder>(_result.getSubfolders()).listIterator();
268
                fetchFolder(iter, new Command() {
297 269
                    @Override
298 270
                    public void execute() {
299 271
                        dataProvider.getList().clear();

Also available in: Unified diff