Revision 5fab761b
b/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/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/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/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