Statistics
| Branch: | Tag: | Revision:

root / src / gr / ebs / gss / client / CellTreeView.java @ b2b07869

History | View | Annotate | Download (7 kB)

1 b2b07869 koutsoub
/*
2 b2b07869 koutsoub
 * Copyright 2011 Electronic Business Systems Ltd.
3 b2b07869 koutsoub
 *
4 b2b07869 koutsoub
 * This file is part of GSS.
5 b2b07869 koutsoub
 *
6 b2b07869 koutsoub
 * GSS is free software: you can redistribute it and/or modify
7 b2b07869 koutsoub
 * it under the terms of the GNU General Public License as published by
8 b2b07869 koutsoub
 * the Free Software Foundation, either version 3 of the License, or
9 b2b07869 koutsoub
 * (at your option) any later version.
10 b2b07869 koutsoub
 *
11 b2b07869 koutsoub
 * GSS is distributed in the hope that it will be useful,
12 b2b07869 koutsoub
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 b2b07869 koutsoub
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 b2b07869 koutsoub
 * GNU General Public License for more details.
15 b2b07869 koutsoub
 *
16 b2b07869 koutsoub
 * You should have received a copy of the GNU General Public License
17 b2b07869 koutsoub
 * along with GSS.  If not, see <http://www.gnu.org/licenses/>.
18 b2b07869 koutsoub
 */
19 b2b07869 koutsoub
package gr.ebs.gss.client;
20 b2b07869 koutsoub
21 b2b07869 koutsoub
import gr.ebs.gss.client.rest.GetCommand;
22 b2b07869 koutsoub
import gr.ebs.gss.client.rest.resource.FolderResource;
23 b2b07869 koutsoub
import gr.ebs.gss.client.rest.resource.FolderResource;
24 b2b07869 koutsoub
import gr.ebs.gss.client.rest.resource.UserResource;
25 b2b07869 koutsoub
26 b2b07869 koutsoub
import java.util.Arrays;
27 b2b07869 koutsoub
28 b2b07869 koutsoub
import com.google.gwt.cell.client.AbstractCell;
29 b2b07869 koutsoub
import com.google.gwt.cell.client.Cell;
30 b2b07869 koutsoub
import com.google.gwt.core.client.GWT;
31 b2b07869 koutsoub
import com.google.gwt.resources.client.ClientBundle;
32 b2b07869 koutsoub
import com.google.gwt.resources.client.ImageResource;
33 b2b07869 koutsoub
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
34 b2b07869 koutsoub
import com.google.gwt.user.cellview.client.CellTree;
35 b2b07869 koutsoub
import com.google.gwt.user.cellview.client.TreeNode;
36 b2b07869 koutsoub
import com.google.gwt.user.cellview.client.HasKeyboardSelectionPolicy.KeyboardSelectionPolicy;
37 b2b07869 koutsoub
import com.google.gwt.user.client.DeferredCommand;
38 b2b07869 koutsoub
import com.google.gwt.user.client.IncrementalCommand;
39 b2b07869 koutsoub
import com.google.gwt.user.client.ui.Composite;
40 b2b07869 koutsoub
import com.google.gwt.user.client.ui.Tree;
41 b2b07869 koutsoub
import com.google.gwt.view.client.AsyncDataProvider;
42 b2b07869 koutsoub
import com.google.gwt.view.client.HasData;
43 b2b07869 koutsoub
import com.google.gwt.view.client.ListDataProvider;
44 b2b07869 koutsoub
import com.google.gwt.view.client.Range;
45 b2b07869 koutsoub
import com.google.gwt.view.client.SingleSelectionModel;
46 b2b07869 koutsoub
import com.google.gwt.view.client.TreeViewModel;
47 b2b07869 koutsoub
import com.google.gwt.view.client.TreeViewModel.DefaultNodeInfo;
48 b2b07869 koutsoub
49 b2b07869 koutsoub
50 b2b07869 koutsoub
/**
51 b2b07869 koutsoub
 * @author kman
52 b2b07869 koutsoub
 *
53 b2b07869 koutsoub
 */
54 b2b07869 koutsoub
public class CellTreeView extends Composite{
55 b2b07869 koutsoub
        public static final boolean DONE = false;
56 b2b07869 koutsoub
        Images images;
57 b2b07869 koutsoub
        private final ListDataProvider<FolderResource> rootNodes = new ListDataProvider<FolderResource>();
58 b2b07869 koutsoub
        SingleSelectionModel<FolderResource> selectionModel = new SingleSelectionModel<FolderResource>();
59 b2b07869 koutsoub
        /**
60 b2b07869 koutsoub
         * Specifies the images that will be bundled for this Composite and other
61 b2b07869 koutsoub
         * inherited images that will be included in the same bundle.
62 b2b07869 koutsoub
         */
63 b2b07869 koutsoub
        public interface Images extends ClientBundle, Tree.Resources, FolderContextMenu.Images {
64 b2b07869 koutsoub
65 b2b07869 koutsoub
                @Source("gr/ebs/gss/resources/folder_home.png")
66 b2b07869 koutsoub
                ImageResource home();
67 b2b07869 koutsoub
68 b2b07869 koutsoub
                @Source("gr/ebs/gss/resources/folder_yellow.png")
69 b2b07869 koutsoub
                ImageResource folderYellow();
70 b2b07869 koutsoub
71 b2b07869 koutsoub
                @Source("gr/ebs/gss/resources/mimetypes/document.png")
72 b2b07869 koutsoub
                ImageResource document();
73 b2b07869 koutsoub
74 b2b07869 koutsoub
                @Source("gr/ebs/gss/resources/internet.png")
75 b2b07869 koutsoub
                ImageResource othersShared();
76 b2b07869 koutsoub
77 b2b07869 koutsoub
                @Source("gr/ebs/gss/resources/edit_user.png")
78 b2b07869 koutsoub
                ImageResource myShared();
79 b2b07869 koutsoub
80 b2b07869 koutsoub
                @Source("gr/ebs/gss/resources/folder_user.png")
81 b2b07869 koutsoub
                ImageResource sharedFolder();
82 b2b07869 koutsoub
83 b2b07869 koutsoub
                @Source("gr/ebs/gss/resources/trashcan_empty.png")
84 b2b07869 koutsoub
                ImageResource trash();
85 b2b07869 koutsoub
        }
86 b2b07869 koutsoub
        
87 b2b07869 koutsoub
        /**
88 b2b07869 koutsoub
         * 
89 b2b07869 koutsoub
         */
90 b2b07869 koutsoub
        public CellTreeView(final Images _images) {
91 b2b07869 koutsoub
                images = _images;
92 b2b07869 koutsoub
                TreeViewModel model = new CustomTreeModel();
93 b2b07869 koutsoub
94 b2b07869 koutsoub
            /*
95 b2b07869 koutsoub
             * Create the tree using the model. We use <code>null</code> as the default
96 b2b07869 koutsoub
             * value of the root node. The default value will be passed to
97 b2b07869 koutsoub
             * CustomTreeModel#getNodeInfo();
98 b2b07869 koutsoub
             */
99 b2b07869 koutsoub
            CellTree tree = new CellTree(model, null);
100 b2b07869 koutsoub
            tree.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.ENABLED);
101 b2b07869 koutsoub
102 b2b07869 koutsoub
            
103 b2b07869 koutsoub
            initWidget(tree);
104 b2b07869 koutsoub
            DeferredCommand.addCommand(new IncrementalCommand() {
105 b2b07869 koutsoub
106 b2b07869 koutsoub
                        @Override
107 b2b07869 koutsoub
                        public boolean execute() {
108 b2b07869 koutsoub
                                return fetchRootFolders();
109 b2b07869 koutsoub
                        }
110 b2b07869 koutsoub
                });
111 b2b07869 koutsoub
        }
112 b2b07869 koutsoub
        public boolean fetchRootFolders() {
113 b2b07869 koutsoub
                UserResource userResource = GSS.get().getCurrentUserResource();
114 b2b07869 koutsoub
                if (userResource == null)
115 b2b07869 koutsoub
                        return !DONE;
116 b2b07869 koutsoub
117 b2b07869 koutsoub
                final String path = userResource.getFilesPath();
118 b2b07869 koutsoub
                GetCommand<FolderResource> gf = new GetCommand<FolderResource>(FolderResource.class, path, null) {
119 b2b07869 koutsoub
120 b2b07869 koutsoub
                        @Override
121 b2b07869 koutsoub
                        public void onComplete() {
122 b2b07869 koutsoub
                                FolderResource rootResource = getResult();
123 b2b07869 koutsoub
                                rootNodes.setList(Arrays.asList((FolderResource)rootResource));
124 b2b07869 koutsoub
                                
125 b2b07869 koutsoub
                        }
126 b2b07869 koutsoub
127 b2b07869 koutsoub
                        @Override
128 b2b07869 koutsoub
                        public void onError(Throwable t) {
129 b2b07869 koutsoub
                                GWT.log("Error fetching root folder", t);
130 b2b07869 koutsoub
                                GSS.get().displayError("Unable to fetch root folder");
131 b2b07869 koutsoub
                        }
132 b2b07869 koutsoub
133 b2b07869 koutsoub
                };
134 b2b07869 koutsoub
                DeferredCommand.addCommand(gf);
135 b2b07869 koutsoub
                return DONE;
136 b2b07869 koutsoub
        }
137 b2b07869 koutsoub
138 b2b07869 koutsoub
        public Images getImages() {
139 b2b07869 koutsoub
                return images;
140 b2b07869 koutsoub
        }
141 b2b07869 koutsoub
        
142 b2b07869 koutsoub
        
143 b2b07869 koutsoub
        class CustomTreeModel implements TreeViewModel{
144 b2b07869 koutsoub
                private final Cell<FolderResource> departmentCell = new AbstractCell<FolderResource>(){
145 b2b07869 koutsoub
146 b2b07869 koutsoub
                        @Override
147 b2b07869 koutsoub
                        public void render(com.google.gwt.cell.client.Cell.Context arg0, FolderResource arg1, SafeHtmlBuilder arg2) {
148 b2b07869 koutsoub
                                arg2.appendEscaped(arg1.getName());
149 b2b07869 koutsoub
                                
150 b2b07869 koutsoub
                        }
151 b2b07869 koutsoub
                        
152 b2b07869 koutsoub
                };
153 b2b07869 koutsoub
                
154 b2b07869 koutsoub
                
155 b2b07869 koutsoub
                @Override
156 b2b07869 koutsoub
                public <T> NodeInfo<?> getNodeInfo(T value) {
157 b2b07869 koutsoub
                        if(value==null){
158 b2b07869 koutsoub
                                return new DefaultNodeInfo<FolderResource>(rootNodes, departmentCell,
159 b2b07869 koutsoub
                                            selectionModel, null);
160 b2b07869 koutsoub
                        }
161 b2b07869 koutsoub
                        else if (value instanceof FolderResource) {
162 b2b07869 koutsoub
                        // Second level.
163 b2b07869 koutsoub
                                FolderDataProvider dataProvider = new FolderDataProvider(
164 b2b07869 koutsoub
                            ((FolderResource) value).getUri());
165 b2b07869 koutsoub
                        return new DefaultNodeInfo<FolderResource>(dataProvider, departmentCell,
166 b2b07869 koutsoub
                            selectionModel, null);
167 b2b07869 koutsoub
                        }
168 b2b07869 koutsoub
                        // TODO Auto-generated method stub
169 b2b07869 koutsoub
                        return null;
170 b2b07869 koutsoub
                }
171 b2b07869 koutsoub
172 b2b07869 koutsoub
                @Override
173 b2b07869 koutsoub
                public boolean isLeaf(Object value) {
174 b2b07869 koutsoub
                        /*if(value instanceof FolderResource)
175 b2b07869 koutsoub
                                return ((FolderResource)value).getFolders().size()==0;*/
176 b2b07869 koutsoub
                        return false;
177 b2b07869 koutsoub
                }
178 b2b07869 koutsoub
                
179 b2b07869 koutsoub
        }
180 b2b07869 koutsoub
        
181 b2b07869 koutsoub
        class FolderDataProvider extends AsyncDataProvider<FolderResource>{
182 b2b07869 koutsoub
                private final String department;
183 b2b07869 koutsoub
184 b2b07869 koutsoub
                  public FolderDataProvider(String department) {
185 b2b07869 koutsoub
                    super(null);
186 b2b07869 koutsoub
                    this.department = department;
187 b2b07869 koutsoub
                  }
188 b2b07869 koutsoub
189 b2b07869 koutsoub
                  /*@Override
190 b2b07869 koutsoub
                  public void addDataDisplay(HasData<FolderResource> display) {
191 b2b07869 koutsoub
                    super.addDataDisplay(display);
192 b2b07869 koutsoub

193 b2b07869 koutsoub
                    // Request the count anytime a view is added.
194 b2b07869 koutsoub
                    requestFactory.employeeRequest().countEmployeesByDepartment(department).fire(
195 b2b07869 koutsoub
                        new Receiver<Long>() {
196 b2b07869 koutsoub
                          @Override
197 b2b07869 koutsoub
                          public void onSuccess(Long response) {
198 b2b07869 koutsoub
                            updateRowCount(response.intValue(), true);
199 b2b07869 koutsoub
                          }
200 b2b07869 koutsoub
                        });
201 b2b07869 koutsoub
                  }*/
202 b2b07869 koutsoub
203 b2b07869 koutsoub
                  @Override
204 b2b07869 koutsoub
                  protected void onRangeChanged(final HasData<FolderResource> view) {
205 b2b07869 koutsoub
                    Range range = view.getVisibleRange();
206 b2b07869 koutsoub
                    GetCommand<FolderResource> gf = new GetCommand<FolderResource>(FolderResource.class, department, null) {
207 b2b07869 koutsoub
208 b2b07869 koutsoub
                                @Override
209 b2b07869 koutsoub
                                public void onComplete() {
210 b2b07869 koutsoub
                                        FolderResource rootResource = getResult();
211 b2b07869 koutsoub
                                        
212 b2b07869 koutsoub
                                        
213 b2b07869 koutsoub
                                        if(rootResource.getFolders().size()!=0){
214 b2b07869 koutsoub
                                                updateRowCount(rootResource.getFolders().size(), true);
215 b2b07869 koutsoub
                                                updateRowData(0,rootResource.getFolders());
216 b2b07869 koutsoub
                                        }
217 b2b07869 koutsoub
                                        else{
218 b2b07869 koutsoub
                                                updateRowCount(rootResource.getFolders().size(), true);
219 b2b07869 koutsoub
                                                updateRowData(0,rootResource.getFolders());
220 b2b07869 koutsoub
                                                removeDataDisplay(view);
221 b2b07869 koutsoub
                                        }
222 b2b07869 koutsoub
                                }
223 b2b07869 koutsoub
224 b2b07869 koutsoub
                                @Override
225 b2b07869 koutsoub
                                public void onError(Throwable t) {
226 b2b07869 koutsoub
                                        GWT.log("Error fetching root folder", t);
227 b2b07869 koutsoub
                                        GSS.get().displayError("Unable to fetch root folder");
228 b2b07869 koutsoub
                                }
229 b2b07869 koutsoub
230 b2b07869 koutsoub
                        };
231 b2b07869 koutsoub
                        DeferredCommand.addCommand(gf);
232 b2b07869 koutsoub
                        
233 b2b07869 koutsoub
                  }
234 b2b07869 koutsoub
                
235 b2b07869 koutsoub
        }
236 b2b07869 koutsoub
        
237 b2b07869 koutsoub
        
238 b2b07869 koutsoub
}