Statistics
| Branch: | Tag: | Revision:

root / src / gr / grnet / pithos / web / client / foldertree / FolderTreeViewModel.java @ 6084aa02

History | View | Annotate | Download (3.2 kB)

1
/*
2
 * Copyright (c) 2011 Greek Research and Technology Network
3
 */
4

    
5
package gr.grnet.pithos.web.client.foldertree;
6

    
7
import com.google.gwt.cell.client.AbstractCell;
8
import com.google.gwt.cell.client.Cell;
9
import com.google.gwt.core.client.GWT;
10
import com.google.gwt.core.client.Scheduler;
11
import com.google.gwt.core.client.Scheduler.ScheduledCommand;
12
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
13
import com.google.gwt.user.client.ui.AbstractImagePrototype;
14
import com.google.gwt.view.client.ListDataProvider;
15
import com.google.gwt.view.client.SingleSelectionModel;
16
import com.google.gwt.view.client.TreeViewModel;
17
import gr.grnet.pithos.web.client.GSS;
18
import gr.grnet.pithos.web.client.foldertree.FolderTreeView.FolderCell;
19
import gr.grnet.pithos.web.client.rest.GetRequest;
20
import gr.grnet.pithos.web.client.rest.RestException;
21
import gwtquery.plugins.droppable.client.gwt.DragAndDropNodeInfo;
22

    
23
public class FolderTreeViewModel implements TreeViewModel {
24

    
25
    private SingleSelectionModel<Folder> selectionModel;
26

    
27
    public FolderTreeViewModel(SingleSelectionModel<Folder> selectionModel) {
28
        this.selectionModel = selectionModel;
29
    }
30
    
31
    @Override
32
    public <T> NodeInfo<?> getNodeInfo(T value) {
33
        if (value == null) {
34
            final ListDataProvider<Folder> dataProvider = new ListDataProvider<Folder>();
35
            Folder f = new Folder("Loading ...");
36
            dataProvider.getList().add(f);
37
            Scheduler.get().scheduleDeferred(new ScheduledCommand() {
38
                @Override
39
                public void execute() {
40
                    fetchAccount(dataProvider);
41
                }
42
            });
43
            return new DragAndDropNodeInfo<Folder>(dataProvider, new FolderCell(), selectionModel, null);
44
        }
45
        else {
46
            final ListDataProvider<Folder> dataProvider = new ListDataProvider<Folder>();
47
            return new DragAndDropNodeInfo<Folder>(dataProvider, new FolderCell(), selectionModel, null);
48
        }
49
    }
50

    
51
    @Override
52
    public boolean isLeaf(Object o) {
53
        if (o instanceof Folder) {
54
            Folder f = (Folder) o;
55
            return f.getSubfolders().isEmpty();
56
        }
57
        return false;
58
    }
59

    
60
    public void fetchAccount(final ListDataProvider<Folder> dataProvider) {
61
        GSS app = GSS.get();
62
        String path = app.getApiPath() + app.getUsername() + "?format=json";
63

    
64
        GetRequest<AccountResource> getAccount = new GetRequest<AccountResource>(AccountResource.class, path) {
65
            @Override
66
            public void onSuccess(AccountResource result) {
67
                dataProvider.getList().clear();
68
                for (ContainerResource c : result.getContainers()) {
69
                    dataProvider.getList().add(new Folder(c.getName()));
70
                }
71
            }
72

    
73
            @Override
74
            public void onError(Throwable t) {
75
                GWT.log("Error getting account", t);
76
                if (t instanceof RestException)
77
                    GSS.get().displayError("Error getting account: " + ((RestException) t).getHttpStatusText());
78
                else
79
                    GSS.get().displayError("System error fetching user data: " + t.getMessage());
80
            }
81
        };
82

    
83
        Scheduler.get().scheduleDeferred(getAccount);
84
    }
85
}