2 * Copyright 2008, 2009 Electronic Business Systems Ltd.
4 * This file is part of GSS.
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.
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.
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/>.
19 package gr.ebs.gss.client.tree;
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.UserResource;
30 import java.util.List;
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 import com.google.gwt.user.client.ui.Widget;
41 public class FolderSubtree extends Subtree {
44 * A constant that denotes the completion of an IncrementalCommand.
46 public static final boolean DONE = false;
48 private DnDTreeItem rootItem;
50 public FolderSubtree(PopupTree aTree, final Images _images) {
51 super(aTree, _images);
53 DeferredCommand.addCommand(new IncrementalCommand() {
56 public boolean execute() {
57 return fetchRootFolder();
62 public boolean fetchRootFolder() {
63 UserResource userResource = GSS.get().getCurrentUserResource();
64 if (userResource == null)
67 final String path = userResource.getFilesPath();
68 GetCommand<FolderResource> gf = new GetCommand<FolderResource>(FolderResource.class, path, null) {
71 public void onComplete() {
72 FolderResource rootResource = getResult();
73 Widget rootItemWidget = imageItemHTML(images.home(), rootResource.getName());
74 rootItemWidget.getElement().setId("tree.homeFolder");
75 rootItem = new DnDTreeItem(rootItemWidget, false,tree,true);
76 rootItem.setUserObject(rootResource);
78 tree.addItem(rootItem);
79 rootItem.doDroppable();
80 GSS.get().getFolders().select(rootItem);
81 updateSubFoldersLazily(rootItem, rootResource.getFolders(), images.folderYellow(), images.sharedFolder());
82 rootItem.setState(true);
86 public void onError(Throwable t) {
87 GWT.log("Error fetching root folder", t);
88 GSS.get().displayError("Unable to fetch root folder");
90 rootItem = new DnDTreeItem(imageItemHTML(images.home(), "ERROR"), false,tree);
92 tree.addItem(rootItem);
97 DeferredCommand.addCommand(gf);
101 public void updateSubfolders(final DnDTreeItem folderItem) {
102 if (folderItem.getFolderResource() == null) {
103 GWT.log("folder resource is null", null);
106 updateNodes(folderItem);
109 private void updateNodes(final DnDTreeItem folderItem) {
110 String parentName = "";
111 if (folderItem.getParentItem() != null)
112 parentName = ((DnDTreeItem) folderItem.getParentItem()).getFolderResource().getName() + "->";
113 parentName = parentName + folderItem.getFolderResource().getName();
114 MultipleGetCommand<FolderResource> gf = new MultipleGetCommand<FolderResource>(FolderResource.class,
115 folderItem.getFolderResource().getSubfolderPaths().toArray(new String[] {}), folderItem.getFolderResource().getCache()) {
118 public void onComplete() {
119 List<FolderResource> res = getResult();
120 folderItem.getFolderResource().setFolders(res);
121 updateSubFoldersLazily(folderItem, res, images.folderYellow(), images.sharedFolder());
122 for (int i = 0; i < folderItem.getChildCount(); i++) {
123 DnDTreeItem anItem = (DnDTreeItem) folderItem.getChild(i);
124 updateSubFoldersLazily(anItem, anItem.getFolderResource().getFolders(), images.folderYellow(), images.sharedFolder());
125 anItem.setState(false);
130 public void onError(Throwable t) {
131 GSS.get().displayError("Unable to fetch subfolders");
132 GWT.log("Unable to fetch subfolders", t);
136 public void onError(String p, Throwable throwable) {
137 GWT.log("Path:"+p, throwable);
141 DeferredCommand.addCommand(gf);
144 public void updateFolderAndSubfolders(final DnDTreeItem folderItem) {
145 final String path = folderItem.getFolderResource().getUri();
146 GetCommand<FolderResource> gf = new GetCommand<FolderResource>(FolderResource.class, path, folderItem.getFolderResource()) {
149 public void onComplete() {
150 FolderResource rootResource = getResult();
151 if (!folderItem.equals(rootItem)) {
152 folderItem.undoDraggable();
153 if(rootResource.isShared()||rootResource.isReadForAll())
154 folderItem.updateWidget(imageItemHTML(images.sharedFolder(), rootResource.getName()));
156 folderItem.updateWidget(imageItemHTML(images.folderYellow(), rootResource.getName()));
157 folderItem.setUserObject(rootResource);
158 folderItem.doDraggable();
160 folderItem.undoDroppable();
161 folderItem.setUserObject(rootResource);
162 folderItem.updateWidget(imageItemHTML(images.home(), rootResource.getName()));
163 folderItem.doDroppable();
165 updateSubfolders(folderItem);
169 public void onError(Throwable t) {
170 GWT.log("Error fetching folder", t);
171 GSS.get().displayError("Unable to fetch folder:" + folderItem.getFolderResource().getName());
174 DeferredCommand.addCommand(gf);
178 * Retrieve the rootItem.
180 * @return the rootItem
182 public TreeItem getRootItem() {