Statistics
| Branch: | Tag: | Revision:

root / src / gr / ebs / gss / client / tree / FolderSubtree.java @ 623:66f69a7348ed

History | View | Annotate | Download (5.7 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.Folders.Images;
22
import gr.ebs.gss.client.GSS;
23
import gr.ebs.gss.client.PopupTree;
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.UserResource;
29

    
30
import java.util.List;
31

    
32
import com.google.gwt.core.client.GWT;
33
import com.google.gwt.user.client.DeferredCommand;
34
import com.google.gwt.user.client.IncrementalCommand;
35
import com.google.gwt.user.client.ui.TreeItem;
36

    
37
/**
38
 * @author kman
39
 */
40
public class FolderSubtree extends Subtree {
41

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

    
47
        private DnDTreeItem rootItem;
48

    
49
        public FolderSubtree(PopupTree aTree, final Images _images) {
50
                super(aTree, _images);
51
                aTree.clear();
52
                DeferredCommand.addCommand(new IncrementalCommand() {
53

    
54
                        @Override
55
                        public boolean execute() {
56
                                return fetchRootFolder();
57
                        }
58
                });
59
        }
60

    
61
        public boolean fetchRootFolder() {
62
                UserResource userResource = GSS.get().getCurrentUserResource();
63
                if (userResource == null)
64
                        return !DONE;
65

    
66
                final String path = userResource.getFilesPath();
67
                GetCommand<FolderResource> gf = new GetCommand<FolderResource>(FolderResource.class, path, null) {
68

    
69
                        @Override
70
                        public void onComplete() {
71
                                FolderResource rootResource = getResult();
72
                                rootItem = new DnDTreeItem(imageItemHTML(images.home(), rootResource.getName()), false,tree,true);
73
                                rootItem.setUserObject(rootResource);
74
                                tree.clear();
75
                                tree.addItem(rootItem);
76
                                rootItem.doDroppable();
77
                                GSS.get().getFolders().select(rootItem);
78
                                updateSubFoldersLazily(rootItem, rootResource.getFolders(), images.folderYellow(), images.sharedFolder());
79
                                rootItem.setState(true);
80
                        }
81

    
82
                        @Override
83
                        public void onError(Throwable t) {
84
                                GWT.log("Error fetching root folder", t);
85
                                GSS.get().displayError("Unable to fetch root folder");
86
                                if(rootItem != null){
87
                                        rootItem = new DnDTreeItem(imageItemHTML(images.home(), "ERROR"), false,tree);
88
                                        tree.clear();
89
                                        tree.addItem(rootItem);
90
                                }
91
                        }
92

    
93
                };
94
                DeferredCommand.addCommand(gf);
95
                return DONE;
96
        }
97

    
98
        public void updateSubfolders(final DnDTreeItem folderItem) {
99
                if (folderItem.getFolderResource() == null) {
100
                        GWT.log("folder resource is null", null);
101
                        return;
102
                }
103
                updateNodes(folderItem);
104
        }
105

    
106
        private void updateNodes(final DnDTreeItem folderItem) {
107
                String parentName = "";
108
                if (folderItem.getParentItem() != null)
109
                        parentName = ((DnDTreeItem) folderItem.getParentItem()).getFolderResource().getName() + "->";
110
                parentName = parentName + folderItem.getFolderResource().getName();
111
                MultipleGetCommand<FolderResource> gf = new MultipleGetCommand<FolderResource>(FolderResource.class,
112
                                        folderItem.getFolderResource().getSubfolderPaths().toArray(new String[] {}), folderItem.getFolderResource().getCache()) {
113

    
114
                        @Override
115
                        public void onComplete() {
116
                                List<FolderResource> res = getResult();
117
                                folderItem.getFolderResource().setFolders(res);
118
                                updateSubFoldersLazily(folderItem, res, images.folderYellow(), images.sharedFolder());
119
                                for (int i = 0; i < folderItem.getChildCount(); i++) {
120
                                        DnDTreeItem anItem = (DnDTreeItem) folderItem.getChild(i);
121
                                        updateSubFoldersLazily(anItem, anItem.getFolderResource().getFolders(), images.folderYellow(), images.sharedFolder());
122
                                        anItem.setState(false);
123
                                }
124
                        }
125

    
126
                        @Override
127
                        public void onError(Throwable t) {
128
                                GSS.get().displayError("Unable to fetch subfolders");
129
                                GWT.log("Unable to fetch subfolders", t);
130
                        }
131

    
132
                        @Override
133
                        public void onError(String p, Throwable throwable) {
134
                                GWT.log("Path:"+p, throwable);
135
                        }
136

    
137
                };
138
                DeferredCommand.addCommand(gf);
139
        }
140

    
141
        public void updateFolderAndSubfolders(final DnDTreeItem folderItem) {
142
                final String path = folderItem.getFolderResource().getUri();
143
                GetCommand<FolderResource> gf = new GetCommand<FolderResource>(FolderResource.class, path, folderItem.getFolderResource()) {
144

    
145
                        @Override
146
                        public void onComplete() {
147
                                FolderResource rootResource = getResult();
148
                                if (!folderItem.equals(rootItem)) {
149
                                        folderItem.undoDraggable();
150
                                        if(rootResource.isShared())
151
                                                folderItem.updateWidget(imageItemHTML(images.sharedFolder(), rootResource.getName()));
152
                                        else
153
                                                folderItem.updateWidget(imageItemHTML(images.folderYellow(), rootResource.getName()));
154
                                        folderItem.setUserObject(rootResource);
155
                                        folderItem.doDraggable();
156
                                } else{
157
                                        folderItem.undoDroppable();
158
                                        folderItem.setUserObject(rootResource);
159
                                        folderItem.updateWidget(imageItemHTML(images.home(), rootResource.getName()));
160
                                        folderItem.doDroppable();
161
                                }
162
                                updateSubfolders(folderItem);
163
                        }
164

    
165
                        @Override
166
                        public void onError(Throwable t) {
167
                                GWT.log("Error fetching folder", t);
168
                                GSS.get().displayError("Unable to fetch folder:" + folderItem.getFolderResource().getName());
169
                        }
170
                };
171
                DeferredCommand.addCommand(gf);
172
        }
173

    
174
        /**
175
         * Retrieve the rootItem.
176
         *
177
         * @return the rootItem
178
         */
179
        public TreeItem getRootItem() {
180
                return rootItem;
181
        }
182

    
183
}