Revision 3da18014

b/web_client/src/gr/grnet/pithos/web/client/Pithos.java
306 306
        folderTreeSelectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
307 307
            @Override
308 308
            public void onSelectionChange(SelectionChangeEvent event) {
309
                Folder f = folderTreeSelectionModel.getSelectedObject();
310
                updateFolder(f);
309
                if (folderTreeSelectionModel.getSelectedObject() != null) {
310
                    tagTreeSelectionModel.setSelected(tagTreeSelectionModel.getSelectedObject(), false);
311
                    Folder f = folderTreeSelectionModel.getSelectedObject();
312
                    updateFolder(f);
313
                }
311 314
            }
312 315
        });
313 316

  
......
321 324
        tagTreeSelectionModel.addSelectionChangeHandler(new Handler() {
322 325
            @Override
323 326
            public void onSelectionChange(SelectionChangeEvent event) {
324
                Tag t = tagTreeSelectionModel.getSelectedObject();
325
                updateTag(t);
327
                if (tagTreeSelectionModel.getSelectedObject() != null) {
328
                    folderTreeSelectionModel.setSelected(folderTreeSelectionModel.getSelectedObject(), false);
329
                    Tag t = tagTreeSelectionModel.getSelectedObject();
330
                    updateTag(t);
331
                }
326 332
            }
327 333
        });
328 334
        tagTreeViewModel = new TagTreeViewModel(tagTreeSelectionModel);
......
387 393
        else
388 394
            fileList.showFiles();
389 395
        Set<File> files = f.getFiles();
390
        Iterator<File> iter = files.iterator();
391
        fetchFile(iter, files);
396
        showFiles(files);
397
    }
398

  
399
    public void showFiles(Set<File> files) {
400
        //Iterator<File> iter = files.iterator();
401
        //fetchFile(iter, files);
402
        fileList.setFiles(new ArrayList<File>(files));
392 403
    }
393 404

  
394 405
    private void fetchFile(final Iterator<File> iter, final Set<File> files) {
b/web_client/src/gr/grnet/pithos/web/client/foldertree/Folder.java
48 48
import java.util.LinkedHashSet;
49 49
import java.util.List;
50 50
import java.util.Set;
51
import java.util.StringTokenizer;
51 52

  
52 53
public class Folder extends Resource {
53 54
    /*
......
141 142
            inTrash = true;
142 143

  
143 144
        header = response.getHeader("X-Container-Object-Meta");
144
        if (header != null) {
145
            tags.add("tag1");
146
            tags.add("tag2");
145
        if (header != null && header.length() > 2) {
146
            String tagStr = header.substring(1, header.length() - 1);
147
            while (tagStr.indexOf(",") > -1) {
148
                String tag = tagStr.substring(2, tagStr.indexOf(",") - 1);
149
                tags.add(tag);
150
                tagStr = tagStr.substring(tagStr.indexOf(",") + 1).trim();
151
            }
152
            tags.add(tagStr.substring(2, tagStr.length() - 1));
147 153
        }
148 154

  
149 155
        subfolders.clear(); //This is necessary in case we update a pre-existing Folder so that stale subfolders won't show up
b/web_client/src/gr/grnet/pithos/web/client/tagtree/TagTreeViewModel.java
38 38
import com.google.gwt.cell.client.AbstractCell;
39 39
import com.google.gwt.cell.client.Cell;
40 40
import com.google.gwt.cell.client.TextCell;
41
import com.google.gwt.core.client.GWT;
42
import com.google.gwt.core.client.Scheduler;
43
import com.google.gwt.core.client.Scheduler.ScheduledCommand;
41 44
import com.google.gwt.event.dom.client.ContextMenuEvent;
42 45
import com.google.gwt.safehtml.shared.SafeHtml;
43 46
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
......
48 51
import com.google.gwt.view.client.TreeViewModel;
49 52
import gr.grnet.pithos.web.client.Pithos;
50 53
import gr.grnet.pithos.web.client.foldertree.AccountResource;
54
import gr.grnet.pithos.web.client.foldertree.File;
51 55
import gr.grnet.pithos.web.client.foldertree.Folder;
56
import gr.grnet.pithos.web.client.rest.GetRequest;
57
import gr.grnet.pithos.web.client.rest.RestException;
52 58
import gr.grnet.pithos.web.client.tagtree.TagTreeView.Templates;
59
import java.util.ArrayList;
53 60
import java.util.Arrays;
54 61
import java.util.Iterator;
62
import java.util.LinkedHashSet;
55 63
import java.util.List;
56 64
import java.util.Set;
57 65

  
......
86 94
    @Override
87 95
    public <T> NodeInfo<?> getNodeInfo(T value) {
88 96
        if (value == null) {
89
//            rootDataProvider.getList().add("Tags");
90 97
            return new DefaultNodeInfo<String>(rootDataProvider, new TextCell(new SafeHtmlRenderer<String>() {
91 98
                @Override
92 99
                public SafeHtml render(String object) {
......
101 108
                    builder.appendHtmlConstant(html);
102 109
                    builder.append(Templates.INSTANCE.nameSpan(object));
103 110
                }
104
            }), new SingleSelectionModel<String>(), null);
111
            }), null, null);
105 112
        }
106 113
        else if (value instanceof String) {
107 114
            //fetchAllTags();
......
157 164
    }
158 165

  
159 166
    public void updateTag(Tag tag) {
160
//        if (dataProviderMap.get(tag) == null) {
161
//            dataProviderMap.put(tag, new ListDataProvider<Tag>());
162
//        }
163
//        final ListDataProvider<Tag> dataProvider = dataProviderMap.get(tag);
164
//        if (!tag.isTrash())
165
//            fetchFolder(tag, dataProvider);
166
//        else
167
//            Pithos.get().showFiles(tag);
167
        fetchTag(tag);
168 168
    }
169 169

  
170
//    public void fetchFolder(final Tag f, final ListDataProvider<Tag> dataProvider) {
171
//        dataProvider.flush();
172
//        Scheduler.get().scheduleDeferred(new ScheduledCommand() {
173
//            @Override
174
//            public void execute() {
175
//                final Pithos app = Pithos.get();
176
//                String path = app.getApiPath() + app.getUsername() + "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + f.getPrefix();
177
//                GetRequest<Tag> getFolder = new GetRequest<Tag>(Tag.class, path, f) {
178
//                    @Override
179
//                    public void onSuccess(Tag result) {
180
//                        app.showFiles(result);
181
//                        Iterator<Tag> iter = result.getSubfolders().iterator();
182
//                        fetchFolder(iter, dataProvider, result.getSubfolders());
183
//                    }
184
//
185
//                    @Override
186
//                    public void onError(Throwable t) {
187
//                        GWT.log("Error getting folder", t);
188
//                        if (t instanceof RestException)
189
//                            Pithos.get().displayError("Error getting folder: " + ((RestException) t).getHttpStatusText());
190
//                        else
191
//                            Pithos.get().displayError("System error fetching folder: " + t.getMessage());
192
//                    }
193
//                };
194
//                getFolder.setHeader("X-Auth-Token", app.getToken());
195
//                Scheduler.get().scheduleDeferred(getFolder);
196
//            }
197
//        });
198
//    }
170
    public void fetchTag(Tag t) {
171
        Pithos app = Pithos.get();
172
        AccountResource account = app.getAccount();
173
        Iterator<Folder> iter = account.getContainers().iterator();
174
        fetchTag(iter, t, new LinkedHashSet<File>());
175
    }
176

  
177
    private void fetchTag(final Iterator<Folder> iter, final Tag t, final Set<File> files) {
178
        final Pithos app = Pithos.get();
179
        if (iter.hasNext()) {
180
            Folder f = iter.next();
181
            String path = app.getApiPath() + app.getUsername() + f.getUri() + "?format=json&meta=" + t.getName();
182
            GetRequest<Folder> getFolder = new GetRequest<Folder>(Folder.class, path) {
183
                @Override
184
                public void onSuccess(Folder result) {
185
                    files.addAll(result.getFiles());
186
                    fetchTag(iter, t, files);
187
                }
188

  
189
                @Override
190
                public void onError(Throwable t) {
191
                    GWT.log("Error getting folder", t);
192
                    if (t instanceof RestException)
193
                        Pithos.get().displayError("Error getting folder: " + ((RestException) t).getHttpStatusText());
194
                    else
195
                        Pithos.get().displayError("System error fetching folder: " + t.getMessage());
196
                }
197
            };
198
            getFolder.setHeader("X-Auth-Token", app.getToken());
199
            Scheduler.get().scheduleDeferred(getFolder);
200
        }
201
        else {
202
            app.showFiles(files);
203
        }
204
    }
199 205

  
200 206
    public void initialize(AccountResource account) {
201 207
        List<Tag> tagList = tagDataProvider.getList();

Also available in: Unified diff