Statistics
| Branch: | Tag: | Revision:

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

History | View | Annotate | Download (9.4 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.tagtree.TagTreeView.Templates;
50

    
51
public class TagTreeViewModel implements TreeViewModel {
52

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

    
55
       @Override
56
        public void render(Context context, Tag tag, SafeHtmlBuilder safeHtmlBuilder) {
57
            String html = AbstractImagePrototype.create(TagTreeView.images.info()).getHTML();
58
            safeHtmlBuilder.appendHtmlConstant(html);
59
            safeHtmlBuilder.append(Templates.INSTANCE.nameSpan(tag.getName()));
60
        }
61

    
62
        @Override
63
        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) {
64
            if (event.getType().equals(com.google.gwt.event.dom.client.ContextMenuEvent.getType().getName())) {
65
                TagTreeViewModel.this.selectionModel.setSelected(tag, true);
66
            }
67
        }
68
    };
69

    
70
    private ListDataProvider<String> rootDataProvider = new ListDataProvider<String>();
71
    private ListDataProvider<Tag> tagDataProvider = new ListDataProvider<Tag>();
72

    
73
    private SingleSelectionModel<Tag> selectionModel;
74

    
75
    public TagTreeViewModel(SingleSelectionModel<Tag> selectionModel) {
76
        this.selectionModel = selectionModel;
77
    }
78

    
79
    @Override
80
    public <T> NodeInfo<?> getNodeInfo(T value) {
81
        if (value == null) {
82
            rootDataProvider.getList().add("Tags");
83
            return new DefaultNodeInfo<String>(rootDataProvider, new TextCell(new SafeHtmlRenderer<String>() {
84
                @Override
85
                public SafeHtml render(String object) {
86
                    SafeHtmlBuilder builder = new SafeHtmlBuilder();
87
                    String html = AbstractImagePrototype.create(TagTreeView.images.tag()).getHTML();
88
                    builder.appendHtmlConstant(html);
89
                    builder.append(Templates.INSTANCE.nameSpan(object));
90
                    return builder.toSafeHtml();
91
                }
92

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

    
109
    @Override
110
    public boolean isLeaf(Object o) {
111
        if (o == null)
112
            return false;
113
        if (o instanceof String)
114
            return false;
115
        else
116
            return true;
117
    }
118

    
119
//    private void fetchFolder(final Iterator<Tag> iter, final ListDataProvider<Tag> dataProvider, final Set<Tag> tags) {
120
//        final Pithos app = Pithos.get();
121
//        if (iter.hasNext()) {
122
//            final Tag f = iter.next();
123
//
124
//            String path = app.getApiPath() + app.getUsername() + "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + f.getPrefix();
125
//            GetRequest<Tag> getFolder = new GetRequest<Tag>(Tag.class, path, f) {
126
//                @Override
127
//                public void onSuccess(Tag result) {
128
//                    fetchFolder(iter, dataProvider, tags);
129
//                }
130
//
131
//                @Override
132
//                public void onError(Throwable t) {
133
//                    GWT.log("Error getting folder", t);
134
//                    if (t instanceof RestException)
135
//                        Pithos.get().displayError("Error getting folder: " + ((RestException) t).getHttpStatusText());
136
//                    else
137
//                        Pithos.get().displayError("System error fetching folder: " + t.getMessage());
138
//                }
139
//            };
140
//            getFolder.setHeader("X-Auth-Token", app.getToken());
141
//            Scheduler.get().scheduleDeferred(getFolder);
142
//        }
143
//        else {
144
//            dataProvider.getList().clear();
145
//            dataProvider.getList().addAll(tags);
146
//            if (dataProvider.equals(rootDataProvider)) {
147
//                selectionModel.setSelected(dataProvider.getList().get(0), true);
148
//
149
//                Tag f = new Tag("Trash");
150
//                f.setTrash(true);
151
//                f.setContainer("trash");
152
//                dataProvider.getList().add(f);
153
//
154
//                f = new Tag("Shared");
155
//                f.setContainer("shared");
156
//                dataProvider.getList().add(f);
157
//
158
//                f = new Tag("Others");
159
//                f.setContainer("others");
160
//                dataProvider.getList().add(f);
161
//
162
//                f = new Tag("Tags");
163
//                f.setContainer("tags");
164
//                dataProvider.getList().add(f);
165
//
166
//                f = new Tag("Groups");
167
//                f.setContainer("groups");
168
//                dataProvider.getList().add(f);
169
//            }
170
//        }
171
//    }
172
//
173
//    public void initialize(AccountResource account) {
174
//        Iterator<Tag> iter = account.getContainers().iterator();
175
//        fetchFolder(iter, rootDataProvider, account.getContainers());
176
//    }
177
//
178
    public Tag getSelection() {
179
        return selectionModel.getSelectedObject();
180
    }
181

    
182
    public void updateTag(Tag tag) {
183
//        if (dataProviderMap.get(tag) == null) {
184
//            dataProviderMap.put(tag, new ListDataProvider<Tag>());
185
//        }
186
//        final ListDataProvider<Tag> dataProvider = dataProviderMap.get(tag);
187
//        if (!tag.isTrash())
188
//            fetchFolder(tag, dataProvider);
189
//        else
190
//            Pithos.get().showFiles(tag);
191
    }
192

    
193
//    public void fetchFolder(final Tag f, final ListDataProvider<Tag> dataProvider) {
194
//        dataProvider.flush();
195
//        Scheduler.get().scheduleDeferred(new ScheduledCommand() {
196
//            @Override
197
//            public void execute() {
198
//                final Pithos app = Pithos.get();
199
//                String path = app.getApiPath() + app.getUsername() + "/" + f.getContainer() + "?format=json&delimiter=/&prefix=" + f.getPrefix();
200
//                GetRequest<Tag> getFolder = new GetRequest<Tag>(Tag.class, path, f) {
201
//                    @Override
202
//                    public void onSuccess(Tag result) {
203
//                        app.showFiles(result);
204
//                        Iterator<Tag> iter = result.getSubfolders().iterator();
205
//                        fetchFolder(iter, dataProvider, result.getSubfolders());
206
//                    }
207
//
208
//                    @Override
209
//                    public void onError(Throwable t) {
210
//                        GWT.log("Error getting folder", t);
211
//                        if (t instanceof RestException)
212
//                            Pithos.get().displayError("Error getting folder: " + ((RestException) t).getHttpStatusText());
213
//                        else
214
//                            Pithos.get().displayError("System error fetching folder: " + t.getMessage());
215
//                    }
216
//                };
217
//                getFolder.setHeader("X-Auth-Token", app.getToken());
218
//                Scheduler.get().scheduleDeferred(getFolder);
219
//            }
220
//        });
221
//    }
222
}