Revision 5cd18037 web_client/src/gr/grnet/pithos/web/client/foldertree/FolderTreeViewModel.java
b/web_client/src/gr/grnet/pithos/web/client/foldertree/FolderTreeViewModel.java | ||
---|---|---|
18 | 18 |
import gr.grnet.pithos.web.client.foldertree.FolderTreeView.FolderCell; |
19 | 19 |
import gr.grnet.pithos.web.client.rest.GetRequest; |
20 | 20 |
import gr.grnet.pithos.web.client.rest.RestException; |
21 |
import gr.grnet.pithos.web.client.rest.resource.FolderResource; |
|
21 | 22 |
import gwtquery.plugins.droppable.client.gwt.DragAndDropNodeInfo; |
23 |
import java.util.Iterator; |
|
24 |
import java.util.List; |
|
25 |
import java.util.Set; |
|
22 | 26 |
|
23 | 27 |
public class FolderTreeViewModel implements TreeViewModel { |
24 | 28 |
|
... | ... | |
43 | 47 |
return new DragAndDropNodeInfo<Folder>(dataProvider, new FolderCell(), selectionModel, null); |
44 | 48 |
} |
45 | 49 |
else { |
50 |
final Folder f = (Folder) value; |
|
46 | 51 |
final ListDataProvider<Folder> dataProvider = new ListDataProvider<Folder>(); |
52 |
dataProvider.getList().addAll(f.getSubfolders()); |
|
53 |
Scheduler.get().scheduleDeferred(new ScheduledCommand() { |
|
54 |
@Override |
|
55 |
public void execute() { |
|
56 |
final GSS app = GSS.get(); |
|
57 |
String container = f.getContainer() == null ? f.getName() : f.getContainer(); |
|
58 |
String prefix = f.getContainer() == null ? "" : f.getPrefix(); |
|
59 |
String path = app.getApiPath() + app.getUsername() + "/" + container + "?format=json&delimiter=/&prefix=" + prefix; |
|
60 |
GetRequest<Folder> getFolder = new GetRequest<Folder>(Folder.class, path, f) { |
|
61 |
@Override |
|
62 |
public void onSuccess(Folder result) { |
|
63 |
Iterator<Folder> iter = result.getSubfolders().iterator(); |
|
64 |
fetchFolder(iter, dataProvider, result.getSubfolders()); |
|
65 |
} |
|
66 |
|
|
67 |
@Override |
|
68 |
public void onError(Throwable t) { |
|
69 |
GWT.log("Error getting folder", t); |
|
70 |
if (t instanceof RestException) |
|
71 |
GSS.get().displayError("Error getting folder: " + ((RestException) t).getHttpStatusText()); |
|
72 |
else |
|
73 |
GSS.get().displayError("System error fetching folder: " + t.getMessage()); |
|
74 |
} |
|
75 |
}; |
|
76 |
Scheduler.get().scheduleDeferred(getFolder); |
|
77 |
} |
|
78 |
}); |
|
47 | 79 |
return new DragAndDropNodeInfo<Folder>(dataProvider, new FolderCell(), selectionModel, null); |
48 | 80 |
} |
49 | 81 |
} |
... | ... | |
58 | 90 |
} |
59 | 91 |
|
60 | 92 |
public void fetchAccount(final ListDataProvider<Folder> dataProvider) { |
61 |
GSS app = GSS.get(); |
|
93 |
final GSS app = GSS.get();
|
|
62 | 94 |
String path = app.getApiPath() + app.getUsername() + "?format=json"; |
63 | 95 |
|
64 | 96 |
GetRequest<AccountResource> getAccount = new GetRequest<AccountResource>(AccountResource.class, path) { |
65 | 97 |
@Override |
66 | 98 |
public void onSuccess(AccountResource result) { |
67 |
dataProvider.getList().clear(); |
|
68 |
for (ContainerResource c : result.getContainers()) { |
|
69 |
dataProvider.getList().add(new Folder(c.getName())); |
|
70 |
} |
|
99 |
app.setAccount(result); |
|
100 |
Iterator<Folder> iter = result.getContainers().iterator(); |
|
101 |
fetchFolder(iter, dataProvider, result.getContainers()); |
|
71 | 102 |
} |
72 | 103 |
|
73 | 104 |
@Override |
... | ... | |
82 | 113 |
|
83 | 114 |
Scheduler.get().scheduleDeferred(getAccount); |
84 | 115 |
} |
116 |
|
|
117 |
private void fetchFolder(final Iterator<Folder> iter, final ListDataProvider<Folder> dataProvider, final Set<Folder> folders) { |
|
118 |
if (iter.hasNext()) { |
|
119 |
final Folder f = iter.next(); |
|
120 |
|
|
121 |
GSS app = GSS.get(); |
|
122 |
String container = f.getContainer() == null ? f.getName() : f.getContainer(); |
|
123 |
String prefix = f.getContainer() == null ? "" : f.getPrefix(); |
|
124 |
String path = app.getApiPath() + app.getUsername() + "/" + container + "?format=json&delimiter=/&prefix=" + prefix; |
|
125 |
GetRequest<Folder> getFolder = new GetRequest<Folder>(Folder.class, path, f) { |
|
126 |
@Override |
|
127 |
public void onSuccess(Folder result) { |
|
128 |
fetchFolder(iter, dataProvider, folders); |
|
129 |
} |
|
130 |
|
|
131 |
@Override |
|
132 |
public void onError(Throwable t) { |
|
133 |
GWT.log("Error getting folder", t); |
|
134 |
if (t instanceof RestException) |
|
135 |
GSS.get().displayError("Error getting folder: " + ((RestException) t).getHttpStatusText()); |
|
136 |
else |
|
137 |
GSS.get().displayError("System error fetching folder: " + t.getMessage()); |
|
138 |
} |
|
139 |
}; |
|
140 |
Scheduler.get().scheduleDeferred(getFolder); |
|
141 |
} |
|
142 |
else { |
|
143 |
dataProvider.getList().clear(); |
|
144 |
dataProvider.getList().addAll(folders); |
|
145 |
} |
|
146 |
} |
|
85 | 147 |
} |
Also available in: Unified diff