Statistics
| Branch: | Tag: | Revision:

root / gss / src / gr / ebs / gss / client / tree / MyShareSubtree.java @ 43e3816d

History | View | Annotate | Download (8.2 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 aTree, final Images _images) {
51
                super(aTree, _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
                        @Override
69
                        public void onComplete() {
70
                                rootItem = new DnDTreeItem(imageItemHTML(images.myShared(), "My Shared"), "My Shared", false);
71
                                rootItem.setUserObject(getResult());
72
                                tree.addItem(rootItem);
73
                                rootItem.removeItems();
74
                                rootItem.doDroppable();
75
                                update(rootItem);
76
                        }
77

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

    
92
        public void update(final DnDTreeItem folderItem) {
93
                if (folderItem.getFolderResource() != null) {
94
                        folderItem.removeItems();
95
                        List<String> newPaths = new ArrayList<String>();
96
                        for (String s : folderItem.getFolderResource().getSubfolderPaths()) {
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
                                @Override
110
                                public void onComplete() {
111
                                        List<FolderResource> res = getResult();
112
                                        for (FolderResource r : res) {
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
                                @Override
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
                                @Override
145
                                public void onComplete() {
146
                                        List<FolderResource> res = getResult();
147
                                        for (FolderResource r : res) {
148
                                                DnDTreeItem child = (DnDTreeItem) addImageItem(folderItem, r.getName(), images.folderYellow(), true);
149
                                                child.setUserObject(r);
150
                                                child.setState(false);
151
                                                child.doDraggable();
152
                                                update(child);
153
                                        }
154
                                }
155

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

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

    
171
        private boolean isRoot(String f, List<String> folders) {
172
                for (String t : folders)
173
                        if (!f.equals(t) && f.startsWith(t))
174
                                return false;
175
                return true;
176
        }
177

    
178
        public void updateFolderAndSubfolders(final DnDTreeItem folderItem) {
179
                if (folderItem.getFolderResource() != null) {
180
                        final String path = folderItem.getFolderResource().getUri();
181
                        GetCommand<SharedResource> gs = new GetCommand<SharedResource>(SharedResource.class, GSS.get().getCurrentUserResource().getSharedPath()) {
182

    
183
                                @Override
184
                                public void onComplete() {
185
                                        rootItem.setUserObject(getResult());
186
                                        GetCommand<FolderResource> gf = new GetCommand<FolderResource>(FolderResource.class, path) {
187

    
188
                                                @Override
189
                                                public void onComplete() {
190
                                                        FolderResource rootResource = getResult();
191
                                                        if(rootItem.getSharedResource().getSubfolderPaths().contains(rootResource.getUri())){
192
                                                                folderItem.undoDraggable();
193
                                                                folderItem.updateWidget(imageItemHTML(images.folderYellow(), rootResource.getName()));
194
                                                                folderItem.setUserObject(rootResource);
195
                                                                folderItem.doDraggable();
196
                                                                update(folderItem);
197
                                                        } else
198
                                                                folderItem.getParentItem().removeItem(folderItem);
199
                                                }
200

    
201
                                                @Override
202
                                                public void onError(Throwable t) {
203
                                                        GWT.log("Error fetching folder", t);
204
                                                        GSS.get().displayError("Unable to fetch folder:" + folderItem.getFolderResource().getName());
205
                                                }
206
                                        };
207
                                        DeferredCommand.addCommand(gf);
208
                                }
209

    
210
                                @Override
211
                                public void onError(Throwable t) {
212
                                        GWT.log("Error fetching Shared Root folder", t);
213
                                        GSS.get().displayError("Unable to fetch Shared Root folder");
214
                                }
215
                        };
216
                        DeferredCommand.addCommand(gs);
217
                }
218
                else if( folderItem.getSharedResource() != null){
219
                        GetCommand<SharedResource> gs = new GetCommand<SharedResource>(SharedResource.class, GSS.get().getCurrentUserResource().getSharedPath()) {
220

    
221
                                @Override
222
                                public void onComplete() {
223
                                        rootItem.setUserObject(getResult());
224
                                        rootItem.removeItems();
225
                                        update(rootItem);
226
                                }
227

    
228
                                @Override
229
                                public void onError(Throwable t) {
230
                                        GWT.log("Error fetching Shared Root folder", t);
231
                                        GSS.get().displayError("Unable to fetch Shared Root folder");
232
                                }
233
                        };
234
                        DeferredCommand.addCommand(gs);
235
                }
236
        }
237

    
238
        /**
239
         * Retrieve the rootItem.
240
         *
241
         * @return the rootItem
242
         */
243
        public TreeItem getRootItem() {
244
                return rootItem;
245
        }
246

    
247
        public void updateNode(TreeItem node, FolderResource folder) {
248
                node.getWidget().removeStyleName("gss-SelectedRow");
249
                if (node instanceof DnDTreeItem) {
250
                        ((DnDTreeItem) node).undoDraggable();
251
                        ((DnDTreeItem) node).updateWidget(imageItemHTML(images.folderYellow(), folder.getName()));
252
                        ((DnDTreeItem) node).doDraggable();
253
                } else
254
                        node.setWidget(imageItemHTML(images.folderYellow(), folder.getName()));
255
                node.setUserObject(folder);
256
        }
257
}