Revision 1ac430a1 web_client/src/gr/grnet/pithos/web/client/foldertree/FolderTreeViewModel.java

b/web_client/src/gr/grnet/pithos/web/client/foldertree/FolderTreeViewModel.java
12 12
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
13 13
import com.google.gwt.user.client.ui.AbstractImagePrototype;
14 14
import com.google.gwt.view.client.ListDataProvider;
15
import com.google.gwt.view.client.SelectionChangeEvent;
16
import com.google.gwt.view.client.SelectionChangeEvent.Handler;
15 17
import com.google.gwt.view.client.SingleSelectionModel;
16 18
import com.google.gwt.view.client.TreeViewModel;
17 19
import gr.grnet.pithos.web.client.GSS;
......
26 28

  
27 29
public class FolderTreeViewModel implements TreeViewModel {
28 30

  
29
    private SingleSelectionModel<Folder> selectionModel;
31
    private SingleSelectionModel<Folder> selectionModel = new SingleSelectionModel<Folder>();
30 32

  
31
    public FolderTreeViewModel(SingleSelectionModel<Folder> selectionModel) {
32
        this.selectionModel = selectionModel;
33
    private ListDataProvider<Folder> rootDataProvider = new ListDataProvider<Folder>();
34

  
35
    public FolderTreeViewModel() {
36
        Handler selectionHandler = new SelectionChangeEvent.Handler() {
37
            @Override
38
            public void onSelectionChange(SelectionChangeEvent event) {
39
                NodeInfo<Folder> nodeInfo = (NodeInfo<Folder>) getNodeInfo(selectionModel.getSelectedObject());
40
                if(nodeInfo == null || nodeInfo.getValueUpdater() == null) {
41
                    //GSS.get().showFileList(selectionModel.getSelectedObject());
42
                }
43
                else
44
                    nodeInfo.getValueUpdater().update(selectionModel.getSelectedObject());
45
                GSS.get().setCurrentSelection(selectionModel.getSelectedObject());
46
            }
47
        };
48
        selectionModel.addSelectionChangeHandler(selectionHandler);
33 49
    }
34
    
50

  
35 51
    @Override
36 52
    public <T> NodeInfo<?> getNodeInfo(T value) {
37 53
        if (value == null) {
38
            final ListDataProvider<Folder> dataProvider = new ListDataProvider<Folder>();
39 54
            Folder f = new Folder("Loading ...");
40
            dataProvider.getList().add(f);
41
            Scheduler.get().scheduleDeferred(new ScheduledCommand() {
42
                @Override
43
                public void execute() {
44
                    fetchAccount(dataProvider);
45
                }
46
            });
47
            return new DragAndDropNodeInfo<Folder>(dataProvider, new FolderCell(), selectionModel, null);
55
            rootDataProvider.getList().add(f);
56
            return new DragAndDropNodeInfo<Folder>(rootDataProvider, new FolderCell(), selectionModel, null);
48 57
        }
49 58
        else {
50 59
            final Folder f = (Folder) value;
51 60
            final ListDataProvider<Folder> dataProvider = new ListDataProvider<Folder>();
52
            dataProvider.getList().addAll(f.getSubfolders());
61
            dataProvider.flush();
53 62
            Scheduler.get().scheduleDeferred(new ScheduledCommand() {
54 63
                @Override
55 64
                public void execute() {
56 65
                    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;
66
                    String path = app.getApiPath() + app.getUsername() + "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + f.getPrefix();
60 67
                    GetRequest<Folder> getFolder = new GetRequest<Folder>(Folder.class, path, f) {
61 68
                        @Override
62 69
                        public void onSuccess(Folder result) {
......
89 96
        return false;
90 97
    }
91 98

  
92
    public void fetchAccount(final ListDataProvider<Folder> dataProvider) {
93
        final GSS app = GSS.get();
94
        String path = app.getApiPath() + app.getUsername() + "?format=json";
95

  
96
        GetRequest<AccountResource> getAccount = new GetRequest<AccountResource>(AccountResource.class, path) {
97
            @Override
98
            public void onSuccess(AccountResource result) {
99
                app.setAccount(result);
100
                Iterator<Folder> iter = result.getContainers().iterator();
101
                fetchFolder(iter, dataProvider, result.getContainers());
102
            }
103

  
104
            @Override
105
            public void onError(Throwable t) {
106
                GWT.log("Error getting account", t);
107
                if (t instanceof RestException)
108
                    GSS.get().displayError("Error getting account: " + ((RestException) t).getHttpStatusText());
109
                else
110
                    GSS.get().displayError("System error fetching user data: " + t.getMessage());
111
            }
112
        };
113

  
114
        Scheduler.get().scheduleDeferred(getAccount);
115
    }
116

  
117 99
    private void fetchFolder(final Iterator<Folder> iter, final ListDataProvider<Folder> dataProvider, final Set<Folder> folders) {
118 100
        if (iter.hasNext()) {
119 101
            final Folder f = iter.next();
120 102

  
121 103
            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;
104
            String path = app.getApiPath() + app.getUsername() + "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + f.getPrefix();
125 105
            GetRequest<Folder> getFolder = new GetRequest<Folder>(Folder.class, path, f) {
126 106
                @Override
127 107
                public void onSuccess(Folder result) {
......
144 124
            dataProvider.getList().addAll(folders);
145 125
        }
146 126
    }
127

  
128
    public void initialize(AccountResource account) {
129
        Iterator<Folder> iter = account.getContainers().iterator();
130
        fetchFolder(iter, rootDataProvider, account.getContainers());
131
    }
147 132
}

Also available in: Unified diff