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.PopupTree;
22 import gr.ebs.gss.client.Folders.Images;
23 import gr.ebs.gss.client.dnd.DnDTreeItem;
24 import gr.ebs.gss.client.rest.resource.FolderResource;
26 import java.util.LinkedList;
27 import java.util.List;
29 import com.google.gwt.user.client.ui.AbstractImagePrototype;
30 import com.google.gwt.user.client.ui.HTML;
31 import com.google.gwt.user.client.ui.TreeItem;
36 public abstract class Subtree {
38 protected PopupTree tree;
42 public Subtree(PopupTree aTree, final Images _images) {
48 * A helper method to simplify adding tree items that have attached images.
49 * {@link #addImageItem(TreeItem, String) code}
51 * @param parent the tree item to which the new item will be added.
52 * @param title the text associated with this item.
53 * @param imageProto the image of the item
56 protected TreeItem addImageItem(final TreeItem parent, final String title, final AbstractImagePrototype imageProto, boolean draggable) {
57 final DnDTreeItem item = new DnDTreeItem(imageItemHTML(imageProto, title), title, draggable);
63 * Generates HTML for a tree item with an attached icon.
65 * @param imageProto the image icon
66 * @param title the title of the item
67 * @return the resultant HTML
69 protected HTML imageItemHTML(final AbstractImagePrototype imageProto, final String title) {
70 HTML html = new HTML("<a class='hidden-link' href='javascript:;'><span >" + imageProto.getHTML() + " " + title + "</span></a>");
74 public void updateSubFoldersLazily(DnDTreeItem folderItem, List<FolderResource> subfolders, AbstractImagePrototype image, AbstractImagePrototype sharedImage) {
75 for (int i = 0; i < folderItem.getChildCount(); i++) {
76 DnDTreeItem c = (DnDTreeItem) folderItem.getChild(i);
77 FolderResource f = (FolderResource) c.getUserObject();
78 if (!listContainsFolder(f, subfolders)) {
80 folderItem.removeItem(c);
84 LinkedList<DnDTreeItem> itemList = new LinkedList();
85 for (FolderResource subfolder : subfolders) {
86 DnDTreeItem item = folderItem.getChild(subfolder);
88 if(subfolder.isShared())
89 item = (DnDTreeItem) addImageItem(folderItem, subfolder.getName(), sharedImage, true);
91 item = (DnDTreeItem) addImageItem(folderItem, subfolder.getName(), image, true);
92 } else if(subfolder.isShared())
93 item.updateWidget(imageItemHTML(sharedImage, subfolder.getName()));
95 item.updateWidget(imageItemHTML(image, subfolder.getName()));
96 item.setUserObject(subfolder);
99 for (DnDTreeItem it : itemList)
101 for (DnDTreeItem it : itemList)
102 folderItem.addItem(it);
103 for (int i = 0; i < folderItem.getChildCount(); i++) {
104 DnDTreeItem c = (DnDTreeItem) folderItem.getChild(i);
109 private boolean listContainsFolder(FolderResource folder, List<FolderResource> subfolders) {
110 for (FolderResource f : subfolders)
111 if (f.getUri().equals(folder.getUri()))