Statistics
| Branch: | Tag: | Revision:

root / web_client / src / gr / grnet / pithos / web / client / tagtree / TagTreeViewModel.java @ ba0078a6

History | View | Annotate | Download (8.7 kB)

1
/*
2
 * Copyright 2011 GRNET S.A. All rights reserved.
3
 *
4
 * Redistribution and use in source and binary forms, with or
5
 * without modification, are permitted provided that the following
6
 * conditions are met:
7
 *
8
 *   1. Redistributions of source code must retain the above
9
 *      copyright notice, this list of conditions and the following
10
 *      disclaimer.
11
 *
12
 *   2. Redistributions in binary form must reproduce the above
13
 *      copyright notice, this list of conditions and the following
14
 *      disclaimer in the documentation and/or other materials
15
 *      provided with the distribution.
16
 *
17
 * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
18
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
21
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
24
 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
25
 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
27
 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28
 * POSSIBILITY OF SUCH DAMAGE.
29
 *
30
 * The views and conclusions contained in the software and
31
 * documentation are those of the authors and should not be
32
 * interpreted as representing official policies, either expressed
33
 * or implied, of GRNET S.A.
34
 */
35

    
36
package gr.grnet.pithos.web.client.tagtree;
37

    
38
import com.google.gwt.cell.client.AbstractCell;
39
import com.google.gwt.cell.client.Cell;
40
import com.google.gwt.cell.client.TextCell;
41
import com.google.gwt.event.dom.client.ContextMenuEvent;
42
import com.google.gwt.safehtml.shared.SafeHtml;
43
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
44
import com.google.gwt.text.shared.SafeHtmlRenderer;
45
import com.google.gwt.user.client.ui.AbstractImagePrototype;
46
import com.google.gwt.view.client.ListDataProvider;
47
import com.google.gwt.view.client.SingleSelectionModel;
48
import com.google.gwt.view.client.TreeViewModel;
49
import gr.grnet.pithos.web.client.Pithos;
50
import gr.grnet.pithos.web.client.foldertree.AccountResource;
51
import gr.grnet.pithos.web.client.foldertree.Folder;
52
import gr.grnet.pithos.web.client.tagtree.TagTreeView.Templates;
53
import java.util.Arrays;
54
import java.util.Iterator;
55
import java.util.List;
56
import java.util.Set;
57

    
58
public class TagTreeViewModel implements TreeViewModel {
59

    
60
    private Cell<Tag> tagCell = new AbstractCell<Tag>(ContextMenuEvent.getType().getName()) {
61

    
62
       @Override
63
        public void render(Context context, Tag tag, SafeHtmlBuilder safeHtmlBuilder) {
64
            String html = AbstractImagePrototype.create(TagTreeView.images.tag()).getHTML();
65
            safeHtmlBuilder.appendHtmlConstant(html);
66
            safeHtmlBuilder.append(Templates.INSTANCE.nameSpan(tag.getName()));
67
        }
68

    
69
        @Override
70
        public void onBrowserEvent(Context context, com.google.gwt.dom.client.Element parent, Tag tag, com.google.gwt.dom.client.NativeEvent event, com.google.gwt.cell.client.ValueUpdater<Tag> valueUpdater) {
71
            if (event.getType().equals(com.google.gwt.event.dom.client.ContextMenuEvent.getType().getName())) {
72
                TagTreeViewModel.this.selectionModel.setSelected(tag, true);
73
            }
74
        }
75
    };
76

    
77
    private ListDataProvider<String> rootDataProvider = new ListDataProvider<String>();
78
    private ListDataProvider<Tag> tagDataProvider = new ListDataProvider<Tag>();
79

    
80
    private SingleSelectionModel<Tag> selectionModel;
81

    
82
    public TagTreeViewModel(SingleSelectionModel<Tag> selectionModel) {
83
        this.selectionModel = selectionModel;
84
    }
85

    
86
    @Override
87
    public <T> NodeInfo<?> getNodeInfo(T value) {
88
        if (value == null) {
89
//            rootDataProvider.getList().add("Tags");
90
            return new DefaultNodeInfo<String>(rootDataProvider, new TextCell(new SafeHtmlRenderer<String>() {
91
                @Override
92
                public SafeHtml render(String object) {
93
                    SafeHtmlBuilder builder = new SafeHtmlBuilder();
94
                    render(object, builder);
95
                    return builder.toSafeHtml();
96
                }
97

    
98
                @Override
99
                public void render(String object, SafeHtmlBuilder builder) {
100
                    String html = AbstractImagePrototype.create(TagTreeView.images.tag()).getHTML();
101
                    builder.appendHtmlConstant(html);
102
                    builder.append(Templates.INSTANCE.nameSpan(object));
103
                }
104
            }), new SingleSelectionModel<String>(), null);
105
        }
106
        else if (value instanceof String) {
107
            //fetchAllTags();
108
            return new DefaultNodeInfo<Tag>(tagDataProvider, tagCell, selectionModel, null);
109
        }
110
        else
111
            return null;
112
    }
113

    
114
    @Override
115
    public boolean isLeaf(Object o) {
116
        if (o == null)
117
            return false;
118
        if (o instanceof String)
119
            return tagDataProvider.getList().isEmpty();
120
        else
121
            return true;
122
    }
123

    
124
    private void fetchTags(final Iterator<Folder> iter) {
125
        final Pithos app = Pithos.get();
126
        if (iter.hasNext()) {
127
            final Folder f = iter.next();
128

    
129
            String path = app.getApiPath() + app.getUsername() + "/" + f.getUri() + "?format=json&delimiter=/&prefix=" + f.getPrefix();
130
//            GetRequest<Tag> getFolder = new GetRequest<Tag>(Tag.class, path, f) {
131
//                @Override
132
//                public void onSuccess(Tag result) {
133
//                    fetchFolder(iter, dataProvider, tags);
134
//                }
135
//
136
//                @Override
137
//                public void onError(Throwable t) {
138
//                    GWT.log("Error getting folder", t);
139
//                    if (t instanceof RestException)
140
//                        Pithos.get().displayError("Error getting folder: " + ((RestException) t).getHttpStatusText());
141
//                    else
142
//                        Pithos.get().displayError("System error fetching folder: " + t.getMessage());
143
//                }
144
//            };
145
//            getFolder.setHeader("X-Auth-Token", app.getToken());
146
//            Scheduler.get().scheduleDeferred(getFolder);
147
        }
148
    }
149
//
150
//    public void initialize(AccountResource account) {
151
//        Iterator<Tag> iter = account.getContainers().iterator();
152
//        fetchFolder(iter, rootDataProvider, account.getContainers());
153
//    }
154
//
155
    public Tag getSelection() {
156
        return selectionModel.getSelectedObject();
157
    }
158

    
159
    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);
168
    }
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
//    }
199

    
200
    public void initialize(AccountResource account) {
201
        List<Tag> tagList = tagDataProvider.getList();
202
        for (Folder f : account.getContainers()) {
203
            for (String t : f.getTags())
204
                tagList.add(new Tag(t));
205
        }
206
        rootDataProvider.getList().add("Tags");
207
    }
208
}