Revision 17ff0011

b/web_client/src/gr/grnet/pithos/web/client/Pithos.java
434 434
		                			trash = f;
435 435
		                			break;
436 436
		                		}
437
		                    folderTreeViewModel.initialize(account);
437
		                    folderTreeViewModel.initialize(account, new Command() {
438
								
439
								@Override
440
								public void execute() {
441
				                    createMySharedTree();
442
								}
443
							});
438 444
		                    groupTreeViewModel.initialize();
439
		                    createMySharedTree();
440 445
		                    showStatistics();
441 446
		                }
442 447
					}
b/web_client/src/gr/grnet/pithos/web/client/foldertree/FolderTreeView.java
60 60
    private void updateChildren(TreeNode node, Folder folder) {
61 61
        for (int i=0; i<node.getChildCount(); i++) {
62 62
            if (folder.equals(node.getChildValue(i))) {
63
                node.setChildOpen(i, false, true);
64
                node.setChildOpen(i, true, true);
63
                node.setChildOpen(i, false, false);
64
                node.setChildOpen(i, true, false);
65 65
            }
66 66
            else {
67 67
                if (node.isChildOpen(i)) {
b/web_client/src/gr/grnet/pithos/web/client/foldertree/FolderTreeViewModel.java
41 41
import gr.grnet.pithos.web.client.rest.GetRequest;
42 42
import gr.grnet.pithos.web.client.rest.RestException;
43 43

  
44
import java.util.ArrayList;
44 45
import java.util.HashMap;
46
import java.util.HashSet;
45 47
import java.util.Iterator;
46 48
import java.util.Map;
47 49

  
......
56 58
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
57 59
import com.google.gwt.user.client.Command;
58 60
import com.google.gwt.user.client.ui.AbstractImagePrototype;
61
import com.google.gwt.view.client.AsyncDataProvider;
62
import com.google.gwt.view.client.HasData;
59 63
import com.google.gwt.view.client.ListDataProvider;
60 64
import com.google.gwt.view.client.SingleSelectionModel;
61 65
import com.google.gwt.view.client.TreeViewModel;
......
99 103

  
100 104
    protected ListDataProvider<Folder> rootDataProvider = new ListDataProvider<Folder>();
101 105

  
102
    private Map<Folder, ListDataProvider<Folder>> dataProviderMap = new HashMap<Folder, ListDataProvider<Folder>>();
106
    private Map<Folder, AsyncDataProvider<Folder>> dataProviderMap = new HashMap<Folder, AsyncDataProvider<Folder>>();
103 107

  
104 108
    protected SingleSelectionModel<Folder> selectionModel;
105 109

  
......
117 121
        }
118 122
		final Folder f = (Folder) value;
119 123
		if (dataProviderMap.get(f) == null) {
120
		    dataProviderMap.put(f, new ListDataProvider<Folder>());
124
		    dataProviderMap.put(f, new AsyncDataProvider<Folder>() {
125

  
126
				@Override
127
				protected void onRangeChanged(HasData<Folder> display) {
128
					fetchFolder(f, this, false, null);
129
				}
130
		    });
121 131
		}
122
		final ListDataProvider<Folder> dataProvider = dataProviderMap.get(f);
123
		fetchFolder(f, dataProvider, false, null);
132
		final AsyncDataProvider<Folder> dataProvider = dataProviderMap.get(f);
124 133
		return new DefaultNodeInfo<Folder>(dataProvider, folderCell, selectionModel, null);
125 134
    }
126 135

  
......
165 174
            callback.execute();
166 175
    }
167 176

  
168
    public void initialize(final AccountResource account) {
177
    public void initialize(final AccountResource account, final Command callback) {
169 178
        Iterator<Folder> iter = account.getContainers().iterator();
170 179
        fetchFolder(iter, new Command() {
171 180
            @Override
......
173 182
                rootDataProvider.getList().clear();
174 183
                rootDataProvider.getList().addAll(account.getContainers());
175 184
                selectionModel.setSelected(rootDataProvider.getList().get(0), true);
185
                if (callback != null)
186
                	callback.execute();
176 187
            }
177 188
        });
178 189
    }
......
181 192
        return selectionModel.getSelectedObject();
182 193
    }
183 194

  
184
    public void updateFolder(Folder folder, boolean showfiles, Command callback) {
195
    public void updateFolder(final Folder folder, final boolean showfiles, final Command callback) {
185 196
        if (dataProviderMap.get(folder) == null) {
186
            dataProviderMap.put(folder, new ListDataProvider<Folder>());
197
            dataProviderMap.put(folder, new AsyncDataProvider<Folder>() {
198

  
199
				@Override
200
				protected void onRangeChanged(HasData<Folder> display) {
201
			        fetchFolder(folder, this, showfiles, callback);
202
				}
203
            });
187 204
        }
188
        final ListDataProvider<Folder> dataProvider = dataProviderMap.get(folder);
205
        final AsyncDataProvider<Folder> dataProvider = dataProviderMap.get(folder);
189 206
        fetchFolder(folder, dataProvider, showfiles, callback);
190 207
    }
191 208

  
192
    public void fetchFolder(final Folder f, final ListDataProvider<Folder> dataProvider, final boolean showfiles, final Command callback) {
209
    public void fetchFolder(final Folder f, final AsyncDataProvider<Folder> dataProvider, final boolean showfiles, final Command callback) {
193 210
        String path = "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + URL.encodeQueryString(f.getPrefix());
194 211
        GetRequest<Folder> getFolder = new GetRequest<Folder>(Folder.class, app.getApiPath(), f.getOwner(), path, f) {
195 212
            @Override
......
200 217
                fetchFolder(iter, new Command() {
201 218
                    @Override
202 219
                    public void execute() {
203
                        dataProvider.getList().clear();
204
                        dataProvider.getList().addAll(_result.getSubfolders());
205
                        app.getFolderTreeView().updateChildren(f);
220
                        dataProvider.updateRowCount(_result.getSubfolders().size(), true);
221
                        dataProvider.updateRowData(0, new ArrayList<Folder>(_result.getSubfolders()));
222
//                        app.getFolderTreeView().updateChildren(f);
206 223
                        if (callback != null)
207 224
                        	callback.execute();
208 225
                    }
b/web_client/src/gr/grnet/pithos/web/client/mysharedtree/MysharedTreeViewModel.java
43 43
import gr.grnet.pithos.web.client.rest.GetRequest;
44 44
import gr.grnet.pithos.web.client.rest.RestException;
45 45

  
46
import java.util.ArrayList;
46 47
import java.util.HashMap;
47 48
import java.util.HashSet;
48 49
import java.util.Iterator;
......
64 65
import com.google.gwt.text.shared.SafeHtmlRenderer;
65 66
import com.google.gwt.user.client.Command;
66 67
import com.google.gwt.user.client.ui.AbstractImagePrototype;
68
import com.google.gwt.view.client.AsyncDataProvider;
69
import com.google.gwt.view.client.HasData;
67 70
import com.google.gwt.view.client.ListDataProvider;
68 71
import com.google.gwt.view.client.SelectionChangeEvent;
69 72
import com.google.gwt.view.client.SelectionChangeEvent.Handler;
......
94 97
        }
95 98
    };
96 99

  
97
    protected ListDataProvider<Folder> firstLevelDataProvider = new ListDataProvider<Folder>();
100
    boolean hasSharedFolders = false;
101
    protected AsyncDataProvider<Folder> firstLevelDataProvider = new AsyncDataProvider<Folder>() {
98 102

  
99
    private Map<Folder, ListDataProvider<Folder>> dataProviderMap = new HashMap<Folder, ListDataProvider<Folder>>();
103
		@Override
104
		protected void onRangeChanged(HasData<Folder> display) {
105
			fetchSharedContainers(null);
106
		}
107
    };
108

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

  
......
142 152
            }),  selectionModel2, null);
143 153
        }
144 154
        else if (value instanceof String) {
145
        	fetchSharedContainers(null);
155
//        	fetchSharedContainers(null);
146 156
            return new DefaultNodeInfo<Folder>(firstLevelDataProvider, folderCell, selectionModel, null);
147 157
        }
148 158
        else {
149 159
            final Folder f = (Folder) value;
150 160
            if (dataProviderMap.get(f) == null) {
151
                dataProviderMap.put(f, new ListDataProvider<Folder>());
161
                dataProviderMap.put(f, new AsyncDataProvider<Folder>() {
162

  
163
					@Override
164
					protected void onRangeChanged(HasData<Folder> display) {
165
			            fetchFolder(f, this, false);
166
					}
167
                });
152 168
            }
153
            final ListDataProvider<Folder> dataProvider = dataProviderMap.get(f);
154
            fetchFolder(f, dataProvider, false);
169
            final AsyncDataProvider<Folder> dataProvider = dataProviderMap.get(f);
155 170
            return new DefaultNodeInfo<Folder>(dataProvider, folderCell, selectionModel, null);
156 171
        }
157 172
    }
158 173

  
159 174
	protected void fetchSharedFiles() {
160 175
    	final List<Folder> containers = app.getAccount().getContainers();
161
    	final ListDataProvider<Folder> tempProvider = new ListDataProvider<Folder>();
176
    	final List<Folder> tempProvider = new ArrayList<Folder>();
162 177
    	Iterator<Folder> iter = containers.iterator();
163 178
    	fetchFolder(iter, tempProvider, new Command() {
164 179
			
165 180
			@Override
166 181
			public void execute() {
167
				firstLevelDataProvider.getList().clear();
168
				firstLevelDataProvider.getList().addAll(tempProvider.getList());
182
				firstLevelDataProvider.updateRowCount(tempProvider.size(), true);
183
				firstLevelDataProvider.updateRowData(0, tempProvider);
184
				hasSharedFolders = tempProvider.size() > 0;
169 185
				app.showFiles(sharedFiles);
170 186
			}
171 187
		});
......
173 189

  
174 190
	private void fetchSharedContainers(final Command callback) {
175 191
    	final List<Folder> containers = app.getAccount().getContainers();
176
    	final ListDataProvider<Folder> tempProvider = new ListDataProvider<Folder>();
192
    	final List<Folder> tempProvider = new ArrayList<Folder>();
177 193
    	Iterator<Folder> iter = containers.iterator();
178 194
    	fetchFolder(iter, tempProvider, new Command() {
179 195
			
180 196
			@Override
181 197
			public void execute() {
182
				firstLevelDataProvider.getList().clear();
183
				firstLevelDataProvider.getList().addAll(tempProvider.getList());
198
				firstLevelDataProvider.updateRowCount(tempProvider.size(), true);
199
				firstLevelDataProvider.updateRowData(0, tempProvider);
200
				hasSharedFolders = tempProvider.size() > 0;
184 201
				if (callback != null)
185 202
					callback.execute();
186 203
			}
......
196 213
            return f.getSubfolders().isEmpty();
197 214
        }
198 215
		else {
199
			return firstLevelDataProvider.getList().isEmpty();
216
			return !hasSharedFolders;
200 217
		}
201 218
    }
202 219

  
203
    protected void fetchFolder(final Iterator<Folder> iter, final ListDataProvider<Folder> dataProvider, final Command callback) {
220
    protected void fetchFolder(final Iterator<Folder> iter, final List<Folder> dataProvider, final Command callback) {
204 221
        if (iter.hasNext()) {
205 222
            final Folder f = iter.next();
206 223

  
......
223 240
						});
224 241
                	}
225 242
                	else {
226
                		dataProvider.getList().add(_result);
243
                		dataProvider.add(_result);
227 244
	                    fetchFolder(iter, dataProvider, callback);
228 245
                	}
229 246
                }
......
253 270
        return selectionModel.getSelectedObject();
254 271
    }
255 272

  
256
    public void updateFolder(Folder folder, boolean showfiles) {
273
    public void updateFolder(final Folder folder, final boolean showfiles) {
257 274
        if (dataProviderMap.get(folder) == null) {
258
            dataProviderMap.put(folder, new ListDataProvider<Folder>());
275
            dataProviderMap.put(folder, new AsyncDataProvider<Folder>() {
276

  
277
				@Override
278
				protected void onRangeChanged(HasData<Folder> display) {
279
			        fetchFolder(folder, this, showfiles);
280
				}
281
            });
259 282
        }
260
        final ListDataProvider<Folder> dataProvider = dataProviderMap.get(folder);
283
        final AsyncDataProvider<Folder> dataProvider = dataProviderMap.get(folder);
261 284
        fetchFolder(folder, dataProvider, showfiles);
262 285
    }
263 286

  
264
    public void fetchFolder(final Folder f, final ListDataProvider<Folder> dataProvider, final boolean showfiles) {
287
    public void fetchFolder(final Folder f, final AsyncDataProvider<Folder> dataProvider, final boolean showfiles) {
265 288
        String path = "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + URL.encodeQueryString(f.getPrefix());
266 289
        GetRequest<Folder> getFolder = new GetRequest<Folder>(Folder.class, app.getApiPath(), f.getOwner(), path, f) {
267 290
            @Override
......
269 292
                if (showfiles)
270 293
                    app.showFiles(_result);
271 294
                Iterator<Folder> iter = _result.getSubfolders().iterator();
272
                fetchFolder(iter, dataProvider, new Command() {
295
                final List<Folder> temp = new ArrayList<Folder>();
296
                fetchFolder(iter, temp, new Command() {
273 297
                    @Override
274 298
                    public void execute() {
275
                        dataProvider.getList().clear();
276
                   		dataProvider.getList().addAll(_result.getSubfolders());
299
                        dataProvider.updateRowCount(_result.getSubfolders().size(), true);
300
                   		dataProvider.updateRowData(0, new ArrayList<Folder>(_result.getSubfolders()));
277 301
                        app.getMySharedTreeView().updateChildren(f);
278 302
                    }
279 303
                });

Also available in: Unified diff