Revision fa5600f7 web_client/src/gr/grnet/pithos/web/client/foldertree/FolderTreeViewModel.java
b/web_client/src/gr/grnet/pithos/web/client/foldertree/FolderTreeViewModel.java | ||
---|---|---|
51 | 51 |
import gr.grnet.pithos.web.client.foldertree.FolderTreeView.Templates; |
52 | 52 |
import gr.grnet.pithos.web.client.rest.GetRequest; |
53 | 53 |
import gr.grnet.pithos.web.client.rest.RestException; |
54 |
import java.util.HashMap; |
|
54 | 55 |
import java.util.Iterator; |
56 |
import java.util.Map; |
|
55 | 57 |
import java.util.Set; |
56 | 58 |
|
57 | 59 |
public class FolderTreeViewModel implements TreeViewModel { |
... | ... | |
68 | 70 |
@Override |
69 | 71 |
public void onBrowserEvent(Cell.Context context, com.google.gwt.dom.client.Element parent, Folder folder, com.google.gwt.dom.client.NativeEvent event, com.google.gwt.cell.client.ValueUpdater<Folder> valueUpdater) { |
70 | 72 |
if (event.getType().equals(ContextMenuEvent.getType().getName())) { |
71 |
Folder target = (Folder) context.getKey(); |
|
72 |
FolderTreeViewModel.this.selectionModel.setSelected(target, true); |
|
73 |
FolderContextMenu menu = new FolderContextMenu(FolderTreeView.images, target); |
|
73 |
FolderTreeViewModel.this.selectionModel.setSelected(folder, true); |
|
74 |
FolderContextMenu menu = new FolderContextMenu(FolderTreeView.images, folder); |
|
74 | 75 |
menu.setPopupPosition(event.getClientX(), event.getClientY()); |
75 | 76 |
menu.show(); |
76 | 77 |
} |
... | ... | |
79 | 80 |
|
80 | 81 |
private ListDataProvider<Folder> rootDataProvider = new ListDataProvider<Folder>(); |
81 | 82 |
|
83 |
private Map<Folder, ListDataProvider<Folder>> dataProviderMap = new HashMap<Folder, ListDataProvider<Folder>>(); |
|
84 |
|
|
82 | 85 |
private SingleSelectionModel<Folder> selectionModel; |
83 | 86 |
|
84 | 87 |
public FolderTreeViewModel(SingleSelectionModel<Folder> selectionModel) { |
... | ... | |
94 | 97 |
} |
95 | 98 |
else { |
96 | 99 |
final Folder f = (Folder) value; |
97 |
final ListDataProvider<Folder> dataProvider = new ListDataProvider<Folder>(); |
|
98 |
dataProvider.flush(); |
|
99 |
Scheduler.get().scheduleDeferred(new ScheduledCommand() { |
|
100 |
@Override |
|
101 |
public void execute() { |
|
102 |
final GSS app = GSS.get(); |
|
103 |
String path = app.getApiPath() + app.getUsername() + "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + f.getPrefix(); |
|
104 |
GetRequest<Folder> getFolder = new GetRequest<Folder>(Folder.class, path, f) { |
|
105 |
@Override |
|
106 |
public void onSuccess(Folder result) { |
|
107 |
Iterator<Folder> iter = result.getSubfolders().iterator(); |
|
108 |
fetchFolder(iter, dataProvider, result.getSubfolders()); |
|
109 |
} |
|
110 |
|
|
111 |
@Override |
|
112 |
public void onError(Throwable t) { |
|
113 |
GWT.log("Error getting folder", t); |
|
114 |
if (t instanceof RestException) |
|
115 |
GSS.get().displayError("Error getting folder: " + ((RestException) t).getHttpStatusText()); |
|
116 |
else |
|
117 |
GSS.get().displayError("System error fetching folder: " + t.getMessage()); |
|
118 |
} |
|
119 |
}; |
|
120 |
getFolder.setHeader("X-Auth-Token", app.getToken()); |
|
121 |
Scheduler.get().scheduleDeferred(getFolder); |
|
122 |
} |
|
123 |
}); |
|
100 |
if (dataProviderMap.get(f) == null) { |
|
101 |
dataProviderMap.put(f, new ListDataProvider<Folder>()); |
|
102 |
} |
|
103 |
final ListDataProvider<Folder> dataProvider = dataProviderMap.get(f); |
|
104 |
fetchFolder(f, dataProvider); |
|
124 | 105 |
return new DefaultNodeInfo<Folder>(dataProvider, folderCell, selectionModel, null); |
125 | 106 |
} |
126 | 107 |
} |
... | ... | |
174 | 155 |
public Folder getSelection() { |
175 | 156 |
return selectionModel.getSelectedObject(); |
176 | 157 |
} |
158 |
|
|
159 |
public void updateFolder(Folder folder) { |
|
160 |
if (dataProviderMap.get(folder) == null) { |
|
161 |
dataProviderMap.put(folder, new ListDataProvider<Folder>()); |
|
162 |
} |
|
163 |
final ListDataProvider<Folder> dataProvider = dataProviderMap.get(folder); |
|
164 |
fetchFolder(folder, dataProvider); |
|
165 |
} |
|
166 |
|
|
167 |
public void fetchFolder(final Folder f, final ListDataProvider<Folder> dataProvider) { |
|
168 |
dataProvider.flush(); |
|
169 |
Scheduler.get().scheduleDeferred(new ScheduledCommand() { |
|
170 |
@Override |
|
171 |
public void execute() { |
|
172 |
final GSS app = GSS.get(); |
|
173 |
String path = app.getApiPath() + app.getUsername() + "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + f.getPrefix(); |
|
174 |
GetRequest<Folder> getFolder = new GetRequest<Folder>(Folder.class, path, f) { |
|
175 |
@Override |
|
176 |
public void onSuccess(Folder result) { |
|
177 |
Iterator<Folder> iter = result.getSubfolders().iterator(); |
|
178 |
fetchFolder(iter, dataProvider, result.getSubfolders()); |
|
179 |
} |
|
180 |
|
|
181 |
@Override |
|
182 |
public void onError(Throwable t) { |
|
183 |
GWT.log("Error getting folder", t); |
|
184 |
if (t instanceof RestException) |
|
185 |
GSS.get().displayError("Error getting folder: " + ((RestException) t).getHttpStatusText()); |
|
186 |
else |
|
187 |
GSS.get().displayError("System error fetching folder: " + t.getMessage()); |
|
188 |
} |
|
189 |
}; |
|
190 |
getFolder.setHeader("X-Auth-Token", app.getToken()); |
|
191 |
Scheduler.get().scheduleDeferred(getFolder); |
|
192 |
} |
|
193 |
}); |
|
194 |
} |
|
177 | 195 |
} |
Also available in: Unified diff