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