Statistics
| Branch: | Tag: | Revision:

root / gss / src / gr / ebs / gss / client / tree / MyShareSubtree.java @ 895035a2

History | View | Annotate | Download (8.4 kB)

1
/*
2
 * Copyright 2008, 2009 Electronic Business Systems Ltd.
3
 *
4
 * This file is part of GSS.
5
 *
6
 * GSS is free software: you can redistribute it and/or modify
7
 * it under the terms of the GNU General Public License as published by
8
 * the Free Software Foundation, either version 3 of the License, or
9
 * (at your option) any later version.
10
 *
11
 * GSS is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with GSS.  If not, see <http://www.gnu.org/licenses/>.
18
 */
19
package gr.ebs.gss.client.tree;
20

    
21
import gr.ebs.gss.client.GSS;
22
import gr.ebs.gss.client.PopupTree;
23
import gr.ebs.gss.client.Folders.Images;
24
import gr.ebs.gss.client.dnd.DnDTreeItem;
25
import gr.ebs.gss.client.rest.GetCommand;
26
import gr.ebs.gss.client.rest.MultipleGetCommand;
27
import gr.ebs.gss.client.rest.resource.FolderResource;
28
import gr.ebs.gss.client.rest.resource.SharedResource;
29
import gr.ebs.gss.client.rest.resource.UserResource;
30

    
31
import java.util.ArrayList;
32
import java.util.List;
33

    
34
import com.google.gwt.core.client.GWT;
35
import com.google.gwt.user.client.DeferredCommand;
36
import com.google.gwt.user.client.IncrementalCommand;
37
import com.google.gwt.user.client.ui.TreeItem;
38
/**
39
 * @author kman
40
 */
41
public class MyShareSubtree extends Subtree {
42

    
43
        /**
44
         * A constant that denotes the completion of an IncrementalCommand.
45
         */
46
        public static final boolean DONE = false;
47

    
48
        private DnDTreeItem rootItem;
49

    
50
        public MyShareSubtree(PopupTree tree, final Images _images) {
51
                super(tree, _images);
52

    
53
                DeferredCommand.addCommand(new IncrementalCommand() {
54

    
55
                        public boolean execute() {
56
                                return updateInit();
57
                        }
58
                });
59
        }
60

    
61
        public boolean updateInit() {
62
                UserResource userResource = GSS.get().getCurrentUserResource();
63
                if (userResource == null || GSS.get().getFolders().getRootItem() == null || GSS.get().getFolders().getTrashItem() == null)
64
                        return !DONE;
65

    
66
                GetCommand<SharedResource> gs = new GetCommand<SharedResource>(SharedResource.class, userResource.getSharedPath()) {
67

    
68
                        public void onComplete() {
69
                                rootItem = new DnDTreeItem(imageItemHTML(images.myShared(), "My Shared"), "My Shared", false);
70
                                rootItem.setUserObject(getResult());
71
                                tree.addItem(rootItem);
72
                                rootItem.removeItems();
73
                                rootItem.doDroppable();
74
                                update(rootItem);
75
                        }
76

    
77
                        public void onError(Throwable t) {
78
                                GWT.log("Error fetching Shared Root folder", t);
79
                                GSS.get().displayError("Unable to fetch Shared Root folder");
80
                                if(rootItem != null){
81
                                        rootItem = new DnDTreeItem(imageItemHTML(images.myShared(), "ERROR"), "ERROR", false);
82
                                        tree.addItem(rootItem);
83
                                }
84
                        }
85
                };
86
                DeferredCommand.addCommand(gs);
87
                return DONE;
88

    
89
        }
90

    
91
        public void update(final DnDTreeItem folderItem) {
92
                if (folderItem.getFolderResource() != null) {
93
                        folderItem.removeItems();
94
                        List<String> newPaths = new ArrayList<String>();
95
                        for (String s : folderItem.getFolderResource().getSubfolderPaths()) {
96

    
97
                                if (!s.endsWith("/"))
98
                                        s = s + "/";
99
                                if (rootItem.getSharedResource().getSubfolderPaths().contains(s))
100
                                        newPaths.add(s);
101
                        }
102
                        String parentName = "";
103
                        if(folderItem.getParentItem() != null && ((DnDTreeItem)folderItem.getParentItem()).getFolderResource() != null)
104
                                parentName = ((DnDTreeItem)folderItem.getParentItem()).getFolderResource().getName()+"->";
105
                        parentName = parentName+folderItem.getFolderResource().getName();
106
                        folderItem.getFolderResource().setSubfolderPaths(newPaths);
107
                        MultipleGetCommand<FolderResource> gf = new MultipleGetCommand<FolderResource>(FolderResource.class, newPaths.toArray(new String[] {})) {
108

    
109
                                public void onComplete() {
110
                                        List<FolderResource> res = getResult();
111
                                        for (FolderResource r : res) {
112

    
113
                                                DnDTreeItem child = (DnDTreeItem) addImageItem(folderItem, r.getName(), images.folderYellow(), true);
114
                                                child.setUserObject(r);
115
                                                child.setState(false);
116
                                                child.doDraggable();
117
                                                if(folderItem.getState())
118
                                                        update(child);
119
                                        }
120

    
121
                                }
122

    
123
                                public void onError(Throwable t) {
124
                                        GSS.get().displayError("Unable to fetch subfolders");
125
                                        GWT.log("Unable to fetch subfolders", t);
126
                                }
127

    
128
                                @Override
129
                                public void onError(String p, Throwable throwable) {
130
                                        GWT.log("Path:"+p, throwable);
131
                                }
132
                        };
133
                        DeferredCommand.addCommand(gf);
134
                }
135
                if (folderItem.getSharedResource() != null) {
136
                        folderItem.removeItems();
137
                        List<String> paths = folderItem.getSharedResource().getSubfolderPaths();
138
                        List<String> newPaths = new ArrayList<String>();
139
                        for (String r : paths)
140
                                if (isRoot(r, paths))
141
                                        newPaths.add(r);
142
                        MultipleGetCommand<FolderResource> gf = new MultipleGetCommand<FolderResource>(FolderResource.class, newPaths.toArray(new String[] {})) {
143

    
144
                                public void onComplete() {
145
                                        List<FolderResource> res = getResult();
146
                                        for (FolderResource r : res) {
147
                                                DnDTreeItem child = (DnDTreeItem) addImageItem(folderItem, r.getName(), images.folderYellow(), true);
148
                                                child.setUserObject(r);
149
                                                child.setState(false);
150
                                                child.doDraggable();
151
                                                update(child);
152
                                        }
153

    
154
                                }
155

    
156
                                public void onError(Throwable t) {
157
                                        GSS.get().displayError("Unable to fetch subfolders");
158
                                        GWT.log("Unable to fetch subfolders", t);
159
                                }
160

    
161
                                @Override
162
                                public void onError(String p, Throwable throwable) {
163
                                        GWT.log("Path:"+p, throwable);
164
                                }
165
                        };
166
                        DeferredCommand.addCommand(gf);
167
                }
168
        }
169

    
170
        private void handleFolders(DnDTreeItem child, FolderResource ff, List<FolderResource> folders) {
171

    
172
        }
173

    
174
        private boolean isRoot(FolderResource f, List<FolderResource> folders) {
175
                for (FolderResource t : folders)
176
                        if (!f.getUri().equals(t.getUri()) && f.getUri().startsWith(t.getUri()))
177
                                return false;
178
                return true;
179
        }
180

    
181
        private boolean isRoot(String f, List<String> folders) {
182
                for (String t : folders)
183
                        if (!f.equals(t) && f.startsWith(t))
184
                                return false;
185
                return true;
186
        }
187

    
188

    
189

    
190
        public void updateFolderAndSubfolders(final DnDTreeItem folderItem) {
191
                if (folderItem.getFolderResource() != null) {
192
                        final String path = folderItem.getFolderResource().getUri();
193
                        GetCommand<SharedResource> gs = new GetCommand<SharedResource>(SharedResource.class, GSS.get().getCurrentUserResource().getSharedPath()) {
194

    
195
                                public void onComplete() {
196
                                        rootItem.setUserObject(getResult());
197
                                        GetCommand<FolderResource> gf = new GetCommand<FolderResource>(FolderResource.class, path) {
198

    
199
                                                public void onComplete() {
200
                                                        FolderResource rootResource = getResult();
201
                                                        if(rootItem.getSharedResource().getSubfolderPaths().contains(rootResource.getUri())){
202
                                                                folderItem.undoDraggable();
203
                                                                folderItem.updateWidget(imageItemHTML(images.folderYellow(), rootResource.getName()));
204
                                                                folderItem.setUserObject(rootResource);
205
                                                                folderItem.doDraggable();
206
                                                                update(folderItem);
207
                                                        } else
208
                                                                folderItem.getParentItem().removeItem(folderItem);
209
                                                }
210

    
211
                                                public void onError(Throwable t) {
212
                                                        GWT.log("Error fetching folder", t);
213
                                                        GSS.get().displayError("Unable to fetch folder:" + folderItem.getFolderResource().getName());
214
                                                }
215
                                        };
216
                                        DeferredCommand.addCommand(gf);
217
                                }
218

    
219
                                public void onError(Throwable t) {
220
                                        GWT.log("Error fetching Shared Root folder", t);
221
                                        GSS.get().displayError("Unable to fetch Shared Root folder");
222
                                }
223
                        };
224
                        DeferredCommand.addCommand(gs);
225

    
226
                }
227
                else if( folderItem.getSharedResource() != null){
228
                        GetCommand<SharedResource> gs = new GetCommand<SharedResource>(SharedResource.class, GSS.get().getCurrentUserResource().getSharedPath()) {
229

    
230
                                public void onComplete() {
231
                                        rootItem.setUserObject(getResult());
232
                                        rootItem.removeItems();
233
                                        update(rootItem);
234
                                }
235

    
236
                                public void onError(Throwable t) {
237
                                        GWT.log("Error fetching Shared Root folder", t);
238
                                        GSS.get().displayError("Unable to fetch Shared Root folder");
239
                                }
240
                        };
241
                        DeferredCommand.addCommand(gs);
242
                }
243

    
244
        }
245

    
246
        /**
247
         * Retrieve the rootItem.
248
         *
249
         * @return the rootItem
250
         */
251
        public TreeItem getRootItem() {
252
                return rootItem;
253
        }
254

    
255

    
256

    
257

    
258
        public void updateNode(TreeItem node, FolderResource folder) {
259
                node.getWidget().removeStyleName("gss-SelectedRow");
260
                if (node instanceof DnDTreeItem) {
261
                        ((DnDTreeItem) node).undoDraggable();
262
                        ((DnDTreeItem) node).updateWidget(imageItemHTML(images.folderYellow(), folder.getName()));
263
                        ((DnDTreeItem) node).doDraggable();
264
                } else
265
                        node.setWidget(imageItemHTML(images.folderYellow(), folder.getName()));
266
                node.setUserObject(folder);
267
        }
268
}