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