Revision 17ff0011 web_client/src/gr/grnet/pithos/web/client/foldertree/FolderTreeViewModel.java

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
                    }

Also available in: Unified diff