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.SharedResource;
29 import gr.ebs.gss.client.rest.resource.UserResource;
31 import java.util.ArrayList;
32 import java.util.List;
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 import com.google.gwt.user.client.ui.Widget;
42 public class MyShareSubtree extends Subtree {
45 * A constant that denotes the completion of an IncrementalCommand.
47 public static final boolean DONE = false;
49 private DnDTreeItem rootItem;
51 public MyShareSubtree(PopupTree aTree, final Images _images) {
52 super(aTree, _images);
54 DeferredCommand.addCommand(new IncrementalCommand() {
57 public boolean execute() {
63 public boolean updateInit() {
64 UserResource userResource = GSS.get().getCurrentUserResource();
65 if (userResource == null || GSS.get().getFolders().getRootItem() == null || GSS.get().getFolders().getTrashItem() == null)
68 GetCommand<SharedResource> gs = new GetCommand<SharedResource>(SharedResource.class, userResource.getSharedPath(), null) {
71 public void onComplete() {
72 Widget rootItemWidget = imageItemHTML(images.myShared(), "My Shared");
73 rootItemWidget.getElement().setId("tree.myShared");
74 rootItem = new DnDTreeItem(rootItemWidget, false,tree,true);
75 rootItem.setUserObject(getResult());
76 tree.addItem(rootItem);
77 //rootItem.removeItems();
78 rootItem.doDroppable();
83 public void onError(Throwable t) {
84 GWT.log("Error fetching Shared Root folder", t);
85 GSS.get().displayError("Unable to fetch Shared Root folder");
87 rootItem = new DnDTreeItem(imageItemHTML(images.myShared(), "ERROR"), false,tree);
88 tree.addItem(rootItem);
92 DeferredCommand.addCommand(gs);
96 public void update(final DnDTreeItem folderItem) {
97 if (folderItem.getFolderResource() != null) {
98 folderItem.removeItems();
99 List<String> newPaths = new ArrayList<String>();
100 for (String s : folderItem.getFolderResource().getSubfolderPaths()) {
101 if (!s.endsWith("/"))
105 String parentName = "";
106 if(folderItem.getParentItem() != null && ((DnDTreeItem)folderItem.getParentItem()).getFolderResource() != null)
107 parentName = ((DnDTreeItem)folderItem.getParentItem()).getFolderResource().getName()+"->";
108 parentName = parentName+folderItem.getFolderResource().getName();
109 folderItem.getFolderResource().setSubfolderPaths(newPaths);
110 MultipleGetCommand<FolderResource> gf = new MultipleGetCommand<FolderResource>(FolderResource.class, newPaths.toArray(new String[] {}), folderItem.getFolderResource().getCache()) {
113 public void onComplete() {
114 List<FolderResource> res = getResult();
115 for (FolderResource r : res)
116 if(r.isShared() || r.isReadForAll()){
117 DnDTreeItem child = (DnDTreeItem) addImageItem(folderItem, r.getName(), images.folderYellow(), true);
118 child.setUserObject(r);
119 child.setState(false);
121 if(folderItem.getState())
127 public void onError(Throwable t) {
128 GSS.get().displayError("Unable to fetch subfolders");
129 GWT.log("Unable to fetch subfolders", t);
133 public void onError(String p, Throwable throwable) {
134 GWT.log("Path:"+p, throwable);
137 DeferredCommand.addCommand(gf);
139 if (folderItem.getSharedResource() != null) {
140 folderItem.removeItems();
141 List<String> paths = folderItem.getSharedResource().getSubfolderPaths();
142 List<String> newPaths = new ArrayList<String>();
143 for (String r : paths)
144 if (isRoot(r, paths))
146 MultipleGetCommand<FolderResource> gf = new MultipleGetCommand<FolderResource>(FolderResource.class, newPaths.toArray(new String[] {}), null) {
149 public void onComplete() {
150 List<FolderResource> res = getResult();
151 for (FolderResource r : res) {
152 DnDTreeItem child = (DnDTreeItem) addImageItem(folderItem, r.getName(), images.folderYellow(), true);
153 child.setUserObject(r);
154 child.setState(false);
161 public void onError(Throwable t) {
162 GSS.get().displayError("Unable to fetch subfolders");
163 GWT.log("Unable to fetch subfolders", t);
167 public void onError(String p, Throwable throwable) {
168 GWT.log("Path:"+p, throwable);
171 DeferredCommand.addCommand(gf);
175 private boolean isRoot(String f, List<String> folders) {
176 for (String t : folders)
177 if (!f.equals(t) && f.startsWith(t))
182 public void updateFolderAndSubfolders(final DnDTreeItem folderItem) {
183 if (folderItem.getFolderResource() != null) {
184 final String path = folderItem.getFolderResource().getUri();
185 GetCommand<SharedResource> gs = new GetCommand<SharedResource>(SharedResource.class, GSS.get().getCurrentUserResource().getSharedPath(), null) {
188 public void onComplete() {
189 rootItem.setUserObject(getResult());
190 GetCommand<FolderResource> gf = new GetCommand<FolderResource>(FolderResource.class, path, folderItem.getFolderResource()) {
193 public void onComplete() {
194 FolderResource rootResource = getResult();
195 if(rootResource.isShared()){
196 folderItem.undoDraggable();
197 folderItem.updateWidget(imageItemHTML(images.folderYellow(), rootResource.getName()));
198 folderItem.setUserObject(rootResource);
199 folderItem.doDraggable();
202 folderItem.getParentItem().removeItem(folderItem);
206 public void onError(Throwable t) {
207 GWT.log("Error fetching folder", t);
208 GSS.get().displayError("Unable to fetch folder:" + folderItem.getFolderResource().getName());
211 DeferredCommand.addCommand(gf);
215 public void onError(Throwable t) {
216 GWT.log("Error fetching Shared Root folder", t);
217 GSS.get().displayError("Unable to fetch Shared Root folder");
220 DeferredCommand.addCommand(gs);
222 else if( folderItem.getSharedResource() != null){
223 GetCommand<SharedResource> gs = new GetCommand<SharedResource>(SharedResource.class, GSS.get().getCurrentUserResource().getSharedPath(), null) {
226 public void onComplete() {
227 rootItem.setUserObject(getResult());
228 if(rootItem.getState()){
229 rootItem.removeItems();
235 public void onError(Throwable t) {
236 GWT.log("Error fetching Shared Root folder", t);
237 GSS.get().displayError("Unable to fetch Shared Root folder");
240 DeferredCommand.addCommand(gs);
245 * Retrieve the rootItem.
247 * @return the rootItem
249 public TreeItem getRootItem() {
253 public void updateNode(TreeItem node, FolderResource folder) {
254 node.getWidget().removeStyleName("gss-SelectedRow");
255 if (node instanceof DnDTreeItem) {
256 ((DnDTreeItem) node).undoDraggable();
257 ((DnDTreeItem) node).updateWidget(imageItemHTML(images.folderYellow(), folder.getName()));
258 ((DnDTreeItem) node).doDraggable();
260 node.setWidget(imageItemHTML(images.folderYellow(), folder.getName()));
261 node.setUserObject(folder);