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