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 |
} |