root / src / gr / ebs / gss / admin / client / ui / FilesTable.java @ 0a37ac21
History | View | Annotate | Download (16.7 kB)
1 | 0a37ac21 | koutsoub | /*
|
---|---|---|---|
2 | 0a37ac21 | koutsoub | * Copyright 2010 Electronic Business Systems Ltd.
|
3 | 0a37ac21 | koutsoub | *
|
4 | 0a37ac21 | koutsoub | * This file is part of GSS.
|
5 | 0a37ac21 | koutsoub | *
|
6 | 0a37ac21 | koutsoub | * GSS is free software: you can redistribute it and/or modify
|
7 | 0a37ac21 | koutsoub | * it under the terms of the GNU General Public License as published by
|
8 | 0a37ac21 | koutsoub | * the Free Software Foundation, either version 3 of the License, or
|
9 | 0a37ac21 | koutsoub | * (at your option) any later version.
|
10 | 0a37ac21 | koutsoub | *
|
11 | 0a37ac21 | koutsoub | * GSS is distributed in the hope that it will be useful,
|
12 | 0a37ac21 | koutsoub | * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13 | 0a37ac21 | koutsoub | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14 | 0a37ac21 | koutsoub | * GNU General Public License for more details.
|
15 | 0a37ac21 | koutsoub | *
|
16 | 0a37ac21 | koutsoub | * You should have received a copy of the GNU General Public License
|
17 | 0a37ac21 | koutsoub | * along with GSS. If not, see <http://www.gnu.org/licenses/>.
|
18 | 0a37ac21 | koutsoub | */
|
19 | 0a37ac21 | koutsoub | package gr.ebs.gss.admin.client.ui; |
20 | 0a37ac21 | koutsoub | |
21 | 0a37ac21 | koutsoub | import gr.ebs.gss.admin.client.ui.FilesTable.FileSorter.FileComparator; |
22 | 0a37ac21 | koutsoub | import gr.ebs.gss.server.domain.dto.FileHeaderDTO; |
23 | 0a37ac21 | koutsoub | |
24 | 0a37ac21 | koutsoub | import java.util.ArrayList; |
25 | 0a37ac21 | koutsoub | import java.util.Collections; |
26 | 0a37ac21 | koutsoub | import java.util.Comparator; |
27 | 0a37ac21 | koutsoub | import java.util.Date; |
28 | 0a37ac21 | koutsoub | import java.util.HashMap; |
29 | 0a37ac21 | koutsoub | import java.util.Iterator; |
30 | 0a37ac21 | koutsoub | import java.util.LinkedHashMap; |
31 | 0a37ac21 | koutsoub | import java.util.LinkedList; |
32 | 0a37ac21 | koutsoub | import java.util.List; |
33 | 0a37ac21 | koutsoub | import java.util.Map; |
34 | 0a37ac21 | koutsoub | import java.util.Set; |
35 | 0a37ac21 | koutsoub | |
36 | 0a37ac21 | koutsoub | import com.google.gwt.core.client.GWT; |
37 | 0a37ac21 | koutsoub | import com.google.gwt.gen2.table.client.AbstractColumnDefinition; |
38 | 0a37ac21 | koutsoub | import com.google.gwt.gen2.table.client.AbstractScrollTable.ScrollPolicy; |
39 | 0a37ac21 | koutsoub | import com.google.gwt.gen2.table.client.AbstractScrollTable.SortPolicy; |
40 | 0a37ac21 | koutsoub | import com.google.gwt.gen2.table.client.CachedTableModel; |
41 | 0a37ac21 | koutsoub | import com.google.gwt.gen2.table.client.CellRenderer; |
42 | 0a37ac21 | koutsoub | import com.google.gwt.gen2.table.client.ColumnDefinition; |
43 | 0a37ac21 | koutsoub | import com.google.gwt.gen2.table.client.DefaultRowRenderer; |
44 | 0a37ac21 | koutsoub | import com.google.gwt.gen2.table.client.DefaultTableDefinition; |
45 | 0a37ac21 | koutsoub | import com.google.gwt.gen2.table.client.FixedWidthGridBulkRenderer; |
46 | 0a37ac21 | koutsoub | import com.google.gwt.gen2.table.client.MutableTableModel; |
47 | 0a37ac21 | koutsoub | import com.google.gwt.gen2.table.client.PagingOptions; |
48 | 0a37ac21 | koutsoub | import com.google.gwt.gen2.table.client.PagingScrollTable; |
49 | 0a37ac21 | koutsoub | import com.google.gwt.gen2.table.client.ScrollTable; |
50 | 0a37ac21 | koutsoub | import com.google.gwt.gen2.table.client.SelectionGrid.SelectionPolicy; |
51 | 0a37ac21 | koutsoub | import com.google.gwt.gen2.table.client.TableDefinition; |
52 | 0a37ac21 | koutsoub | import com.google.gwt.gen2.table.client.TableDefinition.AbstractCellView; |
53 | 0a37ac21 | koutsoub | import com.google.gwt.gen2.table.client.TableModel; |
54 | 0a37ac21 | koutsoub | import com.google.gwt.gen2.table.client.TableModelHelper.Request; |
55 | 0a37ac21 | koutsoub | import com.google.gwt.gen2.table.client.TableModelHelper.Response; |
56 | 0a37ac21 | koutsoub | import com.google.gwt.gen2.table.event.client.RowSelectionEvent; |
57 | 0a37ac21 | koutsoub | import com.google.gwt.gen2.table.event.client.RowSelectionHandler; |
58 | 0a37ac21 | koutsoub | import com.google.gwt.gen2.table.event.client.TableEvent.Row; |
59 | 0a37ac21 | koutsoub | import com.google.gwt.i18n.client.DateTimeFormat; |
60 | 0a37ac21 | koutsoub | import com.google.gwt.user.client.ui.CheckBox; |
61 | 0a37ac21 | koutsoub | import com.google.gwt.user.client.ui.Composite; |
62 | 0a37ac21 | koutsoub | import com.google.gwt.user.client.ui.FlexTable; |
63 | 0a37ac21 | koutsoub | import com.google.gwt.user.client.ui.HTML; |
64 | 0a37ac21 | koutsoub | import com.google.gwt.user.client.ui.HasHorizontalAlignment; |
65 | 0a37ac21 | koutsoub | import com.google.gwt.user.client.ui.Label; |
66 | 0a37ac21 | koutsoub | import com.google.gwt.user.client.ui.VerticalPanel; |
67 | 0a37ac21 | koutsoub | |
68 | 0a37ac21 | koutsoub | |
69 | 0a37ac21 | koutsoub | /**
|
70 | 0a37ac21 | koutsoub | * @author kman
|
71 | 0a37ac21 | koutsoub | *
|
72 | 0a37ac21 | koutsoub | */
|
73 | 0a37ac21 | koutsoub | public class FilesTable extends Composite { |
74 | 0a37ac21 | koutsoub | private CachedTableModel<FileHeaderDTO> cachedTableModel = null; |
75 | 0a37ac21 | koutsoub | private DefaultTableDefinition<FileHeaderDTO> tableDefinition = null; |
76 | 0a37ac21 | koutsoub | private PagingScrollTable<FileHeaderDTO> pagingScrollTable = null; |
77 | 0a37ac21 | koutsoub | private Label countLabel = new Label("There are no files to display."); |
78 | 0a37ac21 | koutsoub | private DataSourceTableModel tableModel = null; |
79 | 0a37ac21 | koutsoub | |
80 | 0a37ac21 | koutsoub | private VerticalPanel vPanel = new VerticalPanel(); |
81 | 0a37ac21 | koutsoub | private FlexTable flexTable = new FlexTable(); |
82 | 0a37ac21 | koutsoub | |
83 | 0a37ac21 | koutsoub | /**
|
84 | 0a37ac21 | koutsoub | * Constructor
|
85 | 0a37ac21 | koutsoub | */
|
86 | 0a37ac21 | koutsoub | public FilesTable() {
|
87 | 0a37ac21 | koutsoub | super();
|
88 | 0a37ac21 | koutsoub | pagingScrollTable = createScrollTable(); |
89 | 0a37ac21 | koutsoub | pagingScrollTable.setHeight("200px");
|
90 | 0a37ac21 | koutsoub | pagingScrollTable.setScrollPolicy(ScrollPolicy.DISABLED); |
91 | 0a37ac21 | koutsoub | PagingOptions pagingOptions = new PagingOptions(pagingScrollTable);
|
92 | 0a37ac21 | koutsoub | |
93 | 0a37ac21 | koutsoub | flexTable.setWidget(0, 0, pagingScrollTable); |
94 | 0a37ac21 | koutsoub | flexTable.getFlexCellFormatter().setColSpan(0, 0, 2); |
95 | 0a37ac21 | koutsoub | flexTable.setWidget(1, 0, pagingOptions); |
96 | 0a37ac21 | koutsoub | |
97 | 0a37ac21 | koutsoub | countLabel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER); |
98 | 0a37ac21 | koutsoub | vPanel.add(countLabel); |
99 | 0a37ac21 | koutsoub | vPanel.add(flexTable); |
100 | 0a37ac21 | koutsoub | |
101 | 0a37ac21 | koutsoub | vPanel.setWidth("100%");
|
102 | 0a37ac21 | koutsoub | flexTable.setWidth("100%");
|
103 | 0a37ac21 | koutsoub | |
104 | 0a37ac21 | koutsoub | super.initWidget(vPanel);
|
105 | 0a37ac21 | koutsoub | showUsers(new ArrayList<FileHeaderDTO>()); |
106 | 0a37ac21 | koutsoub | pagingScrollTable.setFooterGenerated(true);
|
107 | 0a37ac21 | koutsoub | } |
108 | 0a37ac21 | koutsoub | |
109 | 0a37ac21 | koutsoub | public void showUsers(List<FileHeaderDTO> newList) { |
110 | 0a37ac21 | koutsoub | countLabel.setText("There are "+ newList.size() + " files."); |
111 | 0a37ac21 | koutsoub | tableModel.setData(newList); |
112 | 0a37ac21 | koutsoub | tableModel.setRowCount(newList.size()); |
113 | 0a37ac21 | koutsoub | cachedTableModel.clearCache(); |
114 | 0a37ac21 | koutsoub | cachedTableModel.setRowCount(newList.size()); |
115 | 0a37ac21 | koutsoub | |
116 | 0a37ac21 | koutsoub | pagingScrollTable.gotoPage(0, true); |
117 | 0a37ac21 | koutsoub | if(newList.size()<2) |
118 | 0a37ac21 | koutsoub | flexTable.setWidget(1, 0, new HTML()); |
119 | 0a37ac21 | koutsoub | else{
|
120 | 0a37ac21 | koutsoub | PagingOptions pagingOptions = new PagingOptions(pagingScrollTable);
|
121 | 0a37ac21 | koutsoub | flexTable.setWidget(1, 0, pagingOptions); |
122 | 0a37ac21 | koutsoub | } |
123 | 0a37ac21 | koutsoub | } |
124 | 0a37ac21 | koutsoub | |
125 | 0a37ac21 | koutsoub | public FileHeaderDTO getUserOnRow(int rowIdx){ |
126 | 0a37ac21 | koutsoub | String id = pagingScrollTable.getDataTable().getHTML(rowIdx, 0); |
127 | 0a37ac21 | koutsoub | final FileHeaderDTO m = tableModel.getUserById(Long.parseLong(id)); |
128 | 0a37ac21 | koutsoub | return m;
|
129 | 0a37ac21 | koutsoub | } |
130 | 0a37ac21 | koutsoub | |
131 | 0a37ac21 | koutsoub | |
132 | 0a37ac21 | koutsoub | public FileHeaderDTO getSelectedRowObject(RowSelectionEvent event){
|
133 | 0a37ac21 | koutsoub | Set<Row> set = event.getSelectedRows();
|
134 | 0a37ac21 | koutsoub | if(set.size() == 1) { |
135 | 0a37ac21 | koutsoub | int rowIdx = set.iterator().next().getRowIndex();
|
136 | 0a37ac21 | koutsoub | String id = pagingScrollTable.getDataTable().getHTML(rowIdx, 0); |
137 | 0a37ac21 | koutsoub | FileHeaderDTO m = tableModel.getUserById(Long.parseLong(id));
|
138 | 0a37ac21 | koutsoub | return m;
|
139 | 0a37ac21 | koutsoub | } |
140 | 0a37ac21 | koutsoub | return null; |
141 | 0a37ac21 | koutsoub | } |
142 | 0a37ac21 | koutsoub | |
143 | 0a37ac21 | koutsoub | public FileHeaderDTO getUser(Long id){ |
144 | 0a37ac21 | koutsoub | |
145 | 0a37ac21 | koutsoub | return tableModel.getUserById(id);
|
146 | 0a37ac21 | koutsoub | } |
147 | 0a37ac21 | koutsoub | |
148 | 0a37ac21 | koutsoub | |
149 | 0a37ac21 | koutsoub | |
150 | 0a37ac21 | koutsoub | /**
|
151 | 0a37ac21 | koutsoub | * Initializes the scroll table
|
152 | 0a37ac21 | koutsoub | * @return
|
153 | 0a37ac21 | koutsoub | */
|
154 | 0a37ac21 | koutsoub | private PagingScrollTable<FileHeaderDTO> createScrollTable() {
|
155 | 0a37ac21 | koutsoub | // create our own table model
|
156 | 0a37ac21 | koutsoub | tableModel = new DataSourceTableModel();
|
157 | 0a37ac21 | koutsoub | // add it to cached table model
|
158 | 0a37ac21 | koutsoub | cachedTableModel = createCachedTableModel(tableModel); |
159 | 0a37ac21 | koutsoub | |
160 | 0a37ac21 | koutsoub | // create the table definition
|
161 | 0a37ac21 | koutsoub | TableDefinition<FileHeaderDTO> tableDef = createTableDefinition(); |
162 | 0a37ac21 | koutsoub | |
163 | 0a37ac21 | koutsoub | // create the paging scroll table
|
164 | 0a37ac21 | koutsoub | pagingScrollTable = new PagingScrollTable<FileHeaderDTO>(cachedTableModel, tableDef);
|
165 | 0a37ac21 | koutsoub | pagingScrollTable.setPageSize(10);
|
166 | 0a37ac21 | koutsoub | pagingScrollTable.setEmptyTableWidget(new HTML("There is no data to display")); |
167 | 0a37ac21 | koutsoub | pagingScrollTable.getDataTable().setSelectionPolicy(SelectionPolicy.ONE_ROW); |
168 | 0a37ac21 | koutsoub | |
169 | 0a37ac21 | koutsoub | FixedWidthGridBulkRenderer<FileHeaderDTO> bulkRenderer = new FixedWidthGridBulkRenderer<FileHeaderDTO>(pagingScrollTable.getDataTable(), pagingScrollTable);
|
170 | 0a37ac21 | koutsoub | pagingScrollTable.setBulkRenderer(bulkRenderer); |
171 | 0a37ac21 | koutsoub | |
172 | 0a37ac21 | koutsoub | |
173 | 0a37ac21 | koutsoub | pagingScrollTable.setCellPadding(3);
|
174 | 0a37ac21 | koutsoub | pagingScrollTable.setCellSpacing(0);
|
175 | 0a37ac21 | koutsoub | pagingScrollTable.setResizePolicy(ScrollTable.ResizePolicy.FILL_WIDTH); |
176 | 0a37ac21 | koutsoub | |
177 | 0a37ac21 | koutsoub | pagingScrollTable.setSortPolicy(SortPolicy.SINGLE_CELL); |
178 | 0a37ac21 | koutsoub | |
179 | 0a37ac21 | koutsoub | return pagingScrollTable;
|
180 | 0a37ac21 | koutsoub | } |
181 | 0a37ac21 | koutsoub | |
182 | 0a37ac21 | koutsoub | public void addRowSelectionHandler(RowSelectionHandler handler){ |
183 | 0a37ac21 | koutsoub | pagingScrollTable.getDataTable().addRowSelectionHandler(handler); |
184 | 0a37ac21 | koutsoub | } |
185 | 0a37ac21 | koutsoub | |
186 | 0a37ac21 | koutsoub | /**
|
187 | 0a37ac21 | koutsoub | * Create the {@link CachedTableModel}
|
188 | 0a37ac21 | koutsoub | * @param aTableModel
|
189 | 0a37ac21 | koutsoub | * @return
|
190 | 0a37ac21 | koutsoub | */
|
191 | 0a37ac21 | koutsoub | private CachedTableModel<FileHeaderDTO> createCachedTableModel(DataSourceTableModel aTableModel) {
|
192 | 0a37ac21 | koutsoub | CachedTableModel<FileHeaderDTO> tm = new CachedTableModel<FileHeaderDTO>(aTableModel);
|
193 | 0a37ac21 | koutsoub | tm.setPreCachedRowCount(20);
|
194 | 0a37ac21 | koutsoub | tm.setPostCachedRowCount(20);
|
195 | 0a37ac21 | koutsoub | tm.setRowCount(20);
|
196 | 0a37ac21 | koutsoub | return tm;
|
197 | 0a37ac21 | koutsoub | } |
198 | 0a37ac21 | koutsoub | |
199 | 0a37ac21 | koutsoub | private DefaultTableDefinition<FileHeaderDTO> createTableDefinition() {
|
200 | 0a37ac21 | koutsoub | tableDefinition = new DefaultTableDefinition<FileHeaderDTO>();
|
201 | 0a37ac21 | koutsoub | |
202 | 0a37ac21 | koutsoub | final String[] rowColors = new String[] { "#FFFFDD", "EEEEEE" }; |
203 | 0a37ac21 | koutsoub | tableDefinition.setRowRenderer(new DefaultRowRenderer<FileHeaderDTO>(rowColors));
|
204 | 0a37ac21 | koutsoub | |
205 | 0a37ac21 | koutsoub | // id
|
206 | 0a37ac21 | koutsoub | { |
207 | 0a37ac21 | koutsoub | IdColumnDefinition columnDef = new IdColumnDefinition();
|
208 | 0a37ac21 | koutsoub | columnDef.setColumnSortable(true);
|
209 | 0a37ac21 | koutsoub | columnDef.setColumnTruncatable(false);
|
210 | 0a37ac21 | koutsoub | columnDef.setPreferredColumnWidth(35);
|
211 | 0a37ac21 | koutsoub | columnDef.setHeader(0, new HTML("Id")); |
212 | 0a37ac21 | koutsoub | columnDef.setHeaderCount(1);
|
213 | 0a37ac21 | koutsoub | columnDef.setHeaderTruncatable(false);
|
214 | 0a37ac21 | koutsoub | tableDefinition.addColumnDefinition(columnDef); |
215 | 0a37ac21 | koutsoub | } |
216 | 0a37ac21 | koutsoub | { |
217 | 0a37ac21 | koutsoub | NameColumnDefinition columnDef = new NameColumnDefinition();
|
218 | 0a37ac21 | koutsoub | columnDef.setColumnSortable(true);
|
219 | 0a37ac21 | koutsoub | columnDef.setColumnTruncatable(true);
|
220 | 0a37ac21 | koutsoub | columnDef.setHeader(0, new HTML("File Name")); |
221 | 0a37ac21 | koutsoub | columnDef.setHeaderCount(1);
|
222 | 0a37ac21 | koutsoub | columnDef.setHeaderTruncatable(false);
|
223 | 0a37ac21 | koutsoub | tableDefinition.addColumnDefinition(columnDef); |
224 | 0a37ac21 | koutsoub | } |
225 | 0a37ac21 | koutsoub | { |
226 | 0a37ac21 | koutsoub | UriColumnDefinition columnDef = new UriColumnDefinition();
|
227 | 0a37ac21 | koutsoub | columnDef.setColumnSortable(true);
|
228 | 0a37ac21 | koutsoub | columnDef.setColumnTruncatable(true);
|
229 | 0a37ac21 | koutsoub | columnDef.setHeader(0, new HTML("URI")); |
230 | 0a37ac21 | koutsoub | columnDef.setHeaderCount(1);
|
231 | 0a37ac21 | koutsoub | columnDef.setHeaderTruncatable(false);
|
232 | 0a37ac21 | koutsoub | tableDefinition.addColumnDefinition(columnDef); |
233 | 0a37ac21 | koutsoub | } |
234 | 0a37ac21 | koutsoub | // username
|
235 | 0a37ac21 | koutsoub | { |
236 | 0a37ac21 | koutsoub | UserColumnDefinition columnDef = new UserColumnDefinition();
|
237 | 0a37ac21 | koutsoub | columnDef.setColumnSortable(true);
|
238 | 0a37ac21 | koutsoub | columnDef.setColumnTruncatable(true);
|
239 | 0a37ac21 | koutsoub | columnDef.setHeader(0, new HTML("Username")); |
240 | 0a37ac21 | koutsoub | columnDef.setHeaderCount(1);
|
241 | 0a37ac21 | koutsoub | columnDef.setHeaderTruncatable(false);
|
242 | 0a37ac21 | koutsoub | tableDefinition.addColumnDefinition(columnDef); |
243 | 0a37ac21 | koutsoub | } |
244 | 0a37ac21 | koutsoub | { |
245 | 0a37ac21 | koutsoub | FilesizeDefinition columnDef = new FilesizeDefinition();
|
246 | 0a37ac21 | koutsoub | columnDef.setColumnSortable(true);
|
247 | 0a37ac21 | koutsoub | columnDef.setColumnTruncatable(true);
|
248 | 0a37ac21 | koutsoub | columnDef.setHeader(0, new HTML("File Size")); |
249 | 0a37ac21 | koutsoub | columnDef.setHeaderCount(1);
|
250 | 0a37ac21 | koutsoub | columnDef.setHeaderTruncatable(false);
|
251 | 0a37ac21 | koutsoub | tableDefinition.addColumnDefinition(columnDef); |
252 | 0a37ac21 | koutsoub | } |
253 | 0a37ac21 | koutsoub | { |
254 | 0a37ac21 | koutsoub | DeletedColumnDefinition columnDef = new DeletedColumnDefinition();
|
255 | 0a37ac21 | koutsoub | columnDef.setColumnSortable(true);
|
256 | 0a37ac21 | koutsoub | columnDef.setColumnTruncatable(true);
|
257 | 0a37ac21 | koutsoub | columnDef.setHeader(0, new HTML("Deleted")); |
258 | 0a37ac21 | koutsoub | columnDef.setHeaderCount(1);
|
259 | 0a37ac21 | koutsoub | columnDef.setHeaderTruncatable(false);
|
260 | 0a37ac21 | koutsoub | columnDef.setCellRenderer(new CellRenderer<FileHeaderDTO, Boolean>() { |
261 | 0a37ac21 | koutsoub | |
262 | 0a37ac21 | koutsoub | @Override
|
263 | 0a37ac21 | koutsoub | public void renderRowValue(FileHeaderDTO rowValue, ColumnDefinition<FileHeaderDTO, Boolean> aColumnDef, AbstractCellView<FileHeaderDTO> view) { |
264 | 0a37ac21 | koutsoub | CheckBox check = new CheckBox();
|
265 | 0a37ac21 | koutsoub | check.setValue(aColumnDef.getCellValue(rowValue)); |
266 | 0a37ac21 | koutsoub | check.setEnabled(false);
|
267 | 0a37ac21 | koutsoub | view.setWidget(check); |
268 | 0a37ac21 | koutsoub | |
269 | 0a37ac21 | koutsoub | } |
270 | 0a37ac21 | koutsoub | }); |
271 | 0a37ac21 | koutsoub | tableDefinition.addColumnDefinition(columnDef); |
272 | 0a37ac21 | koutsoub | } |
273 | 0a37ac21 | koutsoub | |
274 | 0a37ac21 | koutsoub | |
275 | 0a37ac21 | koutsoub | { |
276 | 0a37ac21 | koutsoub | CreationColumnDefinition columnDef = new CreationColumnDefinition();
|
277 | 0a37ac21 | koutsoub | columnDef.setColumnSortable(true);
|
278 | 0a37ac21 | koutsoub | columnDef.setColumnTruncatable(true);
|
279 | 0a37ac21 | koutsoub | columnDef.setHeader(0, new HTML("Creation Date")); |
280 | 0a37ac21 | koutsoub | columnDef.setHeaderCount(1);
|
281 | 0a37ac21 | koutsoub | columnDef.setHeaderTruncatable(false);
|
282 | 0a37ac21 | koutsoub | tableDefinition.addColumnDefinition(columnDef); |
283 | 0a37ac21 | koutsoub | } |
284 | 0a37ac21 | koutsoub | |
285 | 0a37ac21 | koutsoub | { |
286 | 0a37ac21 | koutsoub | LastModifiedColumnDefinition columnDef = new LastModifiedColumnDefinition();
|
287 | 0a37ac21 | koutsoub | columnDef.setColumnSortable(true);
|
288 | 0a37ac21 | koutsoub | columnDef.setColumnTruncatable(true);
|
289 | 0a37ac21 | koutsoub | columnDef.setHeader(0, new HTML("Modification Date")); |
290 | 0a37ac21 | koutsoub | columnDef.setHeaderCount(1);
|
291 | 0a37ac21 | koutsoub | columnDef.setHeaderTruncatable(false);
|
292 | 0a37ac21 | koutsoub | tableDefinition.addColumnDefinition(columnDef); |
293 | 0a37ac21 | koutsoub | } |
294 | 0a37ac21 | koutsoub | |
295 | 0a37ac21 | koutsoub | |
296 | 0a37ac21 | koutsoub | |
297 | 0a37ac21 | koutsoub | return tableDefinition;
|
298 | 0a37ac21 | koutsoub | } |
299 | 0a37ac21 | koutsoub | |
300 | 0a37ac21 | koutsoub | |
301 | 0a37ac21 | koutsoub | private class DataSourceTableModel extends MutableTableModel<FileHeaderDTO> { |
302 | 0a37ac21 | koutsoub | private Map<Long, FileHeaderDTO> map; |
303 | 0a37ac21 | koutsoub | private FileSorter sorter = new FileSorter(); |
304 | 0a37ac21 | koutsoub | public void setData(List<FileHeaderDTO> list) { |
305 | 0a37ac21 | koutsoub | // toss the list, index by id in a map.
|
306 | 0a37ac21 | koutsoub | map = new HashMap<Long, FileHeaderDTO>(list.size()); |
307 | 0a37ac21 | koutsoub | for(FileHeaderDTO m : list)
|
308 | 0a37ac21 | koutsoub | map.put(m.getId(), m); |
309 | 0a37ac21 | koutsoub | } |
310 | 0a37ac21 | koutsoub | |
311 | 0a37ac21 | koutsoub | public FileHeaderDTO getUserById(long id) { |
312 | 0a37ac21 | koutsoub | return map.get(id);
|
313 | 0a37ac21 | koutsoub | } |
314 | 0a37ac21 | koutsoub | |
315 | 0a37ac21 | koutsoub | @Override
|
316 | 0a37ac21 | koutsoub | protected boolean onRowInserted(int beforeRow) { |
317 | 0a37ac21 | koutsoub | return true; |
318 | 0a37ac21 | koutsoub | } |
319 | 0a37ac21 | koutsoub | |
320 | 0a37ac21 | koutsoub | @Override
|
321 | 0a37ac21 | koutsoub | protected boolean onRowRemoved(int row) { |
322 | 0a37ac21 | koutsoub | return true; |
323 | 0a37ac21 | koutsoub | } |
324 | 0a37ac21 | koutsoub | |
325 | 0a37ac21 | koutsoub | @Override
|
326 | 0a37ac21 | koutsoub | protected boolean onSetRowValue(int row, FileHeaderDTO rowValue) { |
327 | 0a37ac21 | koutsoub | |
328 | 0a37ac21 | koutsoub | return true; |
329 | 0a37ac21 | koutsoub | } |
330 | 0a37ac21 | koutsoub | |
331 | 0a37ac21 | koutsoub | @Override
|
332 | 0a37ac21 | koutsoub | public void requestRows( |
333 | 0a37ac21 | koutsoub | final Request request,
|
334 | 0a37ac21 | koutsoub | TableModel.Callback<FileHeaderDTO> callback) {
|
335 | 0a37ac21 | koutsoub | |
336 | 0a37ac21 | koutsoub | callback.onRowsReady(request, new Response<FileHeaderDTO>(){
|
337 | 0a37ac21 | koutsoub | |
338 | 0a37ac21 | koutsoub | @Override
|
339 | 0a37ac21 | koutsoub | public Iterator<FileHeaderDTO> getRowValues() { |
340 | 0a37ac21 | koutsoub | final int col = request.getColumnSortList().getPrimaryColumn(); |
341 | 0a37ac21 | koutsoub | final boolean ascending = request.getColumnSortList().isPrimaryAscending(); |
342 | 0a37ac21 | koutsoub | if(col < 0) |
343 | 0a37ac21 | koutsoub | map = sorter.sort(map, new FileComparator(ascending,0)); |
344 | 0a37ac21 | koutsoub | else
|
345 | 0a37ac21 | koutsoub | map = sorter.sort(map, new FileComparator(ascending,col));
|
346 | 0a37ac21 | koutsoub | return map.values().iterator();
|
347 | 0a37ac21 | koutsoub | }}); |
348 | 0a37ac21 | koutsoub | } |
349 | 0a37ac21 | koutsoub | |
350 | 0a37ac21 | koutsoub | } |
351 | 0a37ac21 | koutsoub | |
352 | 0a37ac21 | koutsoub | |
353 | 0a37ac21 | koutsoub | private final class IdColumnDefinition extends AbstractColumnDefinition<FileHeaderDTO, Long> { |
354 | 0a37ac21 | koutsoub | @Override
|
355 | 0a37ac21 | koutsoub | public Long getCellValue(FileHeaderDTO rowValue) { |
356 | 0a37ac21 | koutsoub | return rowValue.getId();
|
357 | 0a37ac21 | koutsoub | } |
358 | 0a37ac21 | koutsoub | @Override
|
359 | 0a37ac21 | koutsoub | public void setCellValue(FileHeaderDTO rowValue, Long cellValue) { } |
360 | 0a37ac21 | koutsoub | } |
361 | 0a37ac21 | koutsoub | |
362 | 0a37ac21 | koutsoub | |
363 | 0a37ac21 | koutsoub | private final class NameColumnDefinition extends |
364 | 0a37ac21 | koutsoub | AbstractColumnDefinition<FileHeaderDTO, String> {
|
365 | 0a37ac21 | koutsoub | @Override
|
366 | 0a37ac21 | koutsoub | public String getCellValue(final FileHeaderDTO rowValue) { |
367 | 0a37ac21 | koutsoub | return rowValue.getName();
|
368 | 0a37ac21 | koutsoub | } |
369 | 0a37ac21 | koutsoub | |
370 | 0a37ac21 | koutsoub | @Override
|
371 | 0a37ac21 | koutsoub | public void setCellValue(final FileHeaderDTO rowValue, final String cellValue) {} |
372 | 0a37ac21 | koutsoub | } |
373 | 0a37ac21 | koutsoub | |
374 | 0a37ac21 | koutsoub | |
375 | 0a37ac21 | koutsoub | private final class UriColumnDefinition extends |
376 | 0a37ac21 | koutsoub | AbstractColumnDefinition<FileHeaderDTO, String> {
|
377 | 0a37ac21 | koutsoub | @Override
|
378 | 0a37ac21 | koutsoub | public String getCellValue(final FileHeaderDTO rowValue) { |
379 | 0a37ac21 | koutsoub | return rowValue.getURI();
|
380 | 0a37ac21 | koutsoub | } |
381 | 0a37ac21 | koutsoub | |
382 | 0a37ac21 | koutsoub | @Override
|
383 | 0a37ac21 | koutsoub | public void setCellValue(final FileHeaderDTO rowValue, final String cellValue) {} |
384 | 0a37ac21 | koutsoub | } |
385 | 0a37ac21 | koutsoub | |
386 | 0a37ac21 | koutsoub | |
387 | 0a37ac21 | koutsoub | private final class FilesizeDefinition extends |
388 | 0a37ac21 | koutsoub | AbstractColumnDefinition<FileHeaderDTO, String> {
|
389 | 0a37ac21 | koutsoub | @Override
|
390 | 0a37ac21 | koutsoub | public String getCellValue(final FileHeaderDTO rowValue) { |
391 | 0a37ac21 | koutsoub | return rowValue.getFileSizeAsString();
|
392 | 0a37ac21 | koutsoub | } |
393 | 0a37ac21 | koutsoub | |
394 | 0a37ac21 | koutsoub | @Override
|
395 | 0a37ac21 | koutsoub | public void setCellValue(final FileHeaderDTO rowValue, final String cellValue) {} |
396 | 0a37ac21 | koutsoub | } |
397 | 0a37ac21 | koutsoub | |
398 | 0a37ac21 | koutsoub | |
399 | 0a37ac21 | koutsoub | private final class UserColumnDefinition extends |
400 | 0a37ac21 | koutsoub | AbstractColumnDefinition<FileHeaderDTO, String> {
|
401 | 0a37ac21 | koutsoub | @Override
|
402 | 0a37ac21 | koutsoub | public String getCellValue(final FileHeaderDTO rowValue) { |
403 | 0a37ac21 | koutsoub | return rowValue.getOwner().getUsername();
|
404 | 0a37ac21 | koutsoub | } |
405 | 0a37ac21 | koutsoub | |
406 | 0a37ac21 | koutsoub | @Override
|
407 | 0a37ac21 | koutsoub | public void setCellValue(final FileHeaderDTO rowValue, final String cellValue) {} |
408 | 0a37ac21 | koutsoub | } |
409 | 0a37ac21 | koutsoub | |
410 | 0a37ac21 | koutsoub | |
411 | 0a37ac21 | koutsoub | private final class DeletedColumnDefinition extends |
412 | 0a37ac21 | koutsoub | AbstractColumnDefinition<FileHeaderDTO, Boolean> {
|
413 | 0a37ac21 | koutsoub | @Override
|
414 | 0a37ac21 | koutsoub | public Boolean getCellValue(final FileHeaderDTO rowValue) { |
415 | 0a37ac21 | koutsoub | return rowValue.isDeleted();
|
416 | 0a37ac21 | koutsoub | } |
417 | 0a37ac21 | koutsoub | |
418 | 0a37ac21 | koutsoub | @Override
|
419 | 0a37ac21 | koutsoub | public void setCellValue(final FileHeaderDTO rowValue, final Boolean cellValue) { |
420 | 0a37ac21 | koutsoub | |
421 | 0a37ac21 | koutsoub | } |
422 | 0a37ac21 | koutsoub | } |
423 | 0a37ac21 | koutsoub | |
424 | 0a37ac21 | koutsoub | private final class CreationColumnDefinition extends AbstractColumnDefinition<FileHeaderDTO, String> { |
425 | 0a37ac21 | koutsoub | |
426 | 0a37ac21 | koutsoub | @Override
|
427 | 0a37ac21 | koutsoub | public String getCellValue(final FileHeaderDTO rowValue) { |
428 | 0a37ac21 | koutsoub | return DateTimeFormat.getFormat("dd/MM/yyyy hh:mm:ss tt").format(rowValue.getAuditInfo().getCreationDate()); |
429 | 0a37ac21 | koutsoub | } |
430 | 0a37ac21 | koutsoub | |
431 | 0a37ac21 | koutsoub | @Override
|
432 | 0a37ac21 | koutsoub | public void setCellValue(final FileHeaderDTO rowValue, final String cellValue) {} |
433 | 0a37ac21 | koutsoub | } |
434 | 0a37ac21 | koutsoub | |
435 | 0a37ac21 | koutsoub | private final class LastModifiedColumnDefinition extends AbstractColumnDefinition<FileHeaderDTO, String> { |
436 | 0a37ac21 | koutsoub | |
437 | 0a37ac21 | koutsoub | @Override
|
438 | 0a37ac21 | koutsoub | public String getCellValue(final FileHeaderDTO rowValue) { |
439 | 0a37ac21 | koutsoub | return DateTimeFormat.getFormat("dd/MM/yyyy hh:mm:ss tt").format(rowValue.getAuditInfo().getModificationDate()); |
440 | 0a37ac21 | koutsoub | } |
441 | 0a37ac21 | koutsoub | |
442 | 0a37ac21 | koutsoub | @Override
|
443 | 0a37ac21 | koutsoub | public void setCellValue(final FileHeaderDTO rowValue, final String cellValue) {} |
444 | 0a37ac21 | koutsoub | } |
445 | 0a37ac21 | koutsoub | |
446 | 0a37ac21 | koutsoub | |
447 | 0a37ac21 | koutsoub | |
448 | 0a37ac21 | koutsoub | public static class FileSorter { |
449 | 0a37ac21 | koutsoub | |
450 | 0a37ac21 | koutsoub | |
451 | 0a37ac21 | koutsoub | public Map<Long, FileHeaderDTO> sort(Map<Long, FileHeaderDTO> map, Comparator<FileHeaderDTO> comparator) { |
452 | 0a37ac21 | koutsoub | final List<FileHeaderDTO> list = new LinkedList<FileHeaderDTO>(map.values()); |
453 | 0a37ac21 | koutsoub | Collections.sort(list, comparator);
|
454 | 0a37ac21 | koutsoub | Map<Long, FileHeaderDTO> result = new LinkedHashMap<Long, FileHeaderDTO>(list.size()); |
455 | 0a37ac21 | koutsoub | for(FileHeaderDTO p : list)
|
456 | 0a37ac21 | koutsoub | result.put(p.getId(), p); |
457 | 0a37ac21 | koutsoub | return result;
|
458 | 0a37ac21 | koutsoub | } |
459 | 0a37ac21 | koutsoub | |
460 | 0a37ac21 | koutsoub | public final static class FileComparator implements Comparator<FileHeaderDTO> { |
461 | 0a37ac21 | koutsoub | |
462 | 0a37ac21 | koutsoub | private final boolean ascending; |
463 | 0a37ac21 | koutsoub | private int property; |
464 | 0a37ac21 | koutsoub | public FileComparator(boolean isAscending, int aProperty) { |
465 | 0a37ac21 | koutsoub | ascending = isAscending; |
466 | 0a37ac21 | koutsoub | property = aProperty; |
467 | 0a37ac21 | koutsoub | } |
468 | 0a37ac21 | koutsoub | |
469 | 0a37ac21 | koutsoub | @Override
|
470 | 0a37ac21 | koutsoub | public int compare(FileHeaderDTO m1, FileHeaderDTO m2) { |
471 | 0a37ac21 | koutsoub | GWT.log("sorting:"+property+" "+m1.getFileSize()+" "+m2.getFileSize()); |
472 | 0a37ac21 | koutsoub | switch(property){
|
473 | 0a37ac21 | koutsoub | case 0://id |
474 | 0a37ac21 | koutsoub | if(ascending)
|
475 | 0a37ac21 | koutsoub | return m1.getId().compareTo(m2.getId());
|
476 | 0a37ac21 | koutsoub | return m2.getId().compareTo(m1.getId());
|
477 | 0a37ac21 | koutsoub | case 1://name |
478 | 0a37ac21 | koutsoub | if(ascending)
|
479 | 0a37ac21 | koutsoub | return m1.getName().compareTo(m2.getName());
|
480 | 0a37ac21 | koutsoub | return m2.getName().compareTo(m1.getName());
|
481 | 0a37ac21 | koutsoub | case 2://uri |
482 | 0a37ac21 | koutsoub | if(ascending)
|
483 | 0a37ac21 | koutsoub | return m1.getURI().compareTo(m2.getURI());
|
484 | 0a37ac21 | koutsoub | return m2.getURI().compareTo(m1.getURI());
|
485 | 0a37ac21 | koutsoub | case 3://file size |
486 | 0a37ac21 | koutsoub | if(ascending)
|
487 | 0a37ac21 | koutsoub | return new Long(m1.getFileSize()).compareTo(new Long(m2.getFileSize())); |
488 | 0a37ac21 | koutsoub | return new Long(m2.getFileSize()).compareTo(new Long(m1.getFileSize())); |
489 | 0a37ac21 | koutsoub | case 4://deleted |
490 | 0a37ac21 | koutsoub | if(ascending)
|
491 | 0a37ac21 | koutsoub | return new Boolean(m1.isDeleted()).compareTo(new Boolean(m2.isDeleted())); |
492 | 0a37ac21 | koutsoub | return new Boolean(m2.isDeleted()).compareTo(new Boolean(m1.isDeleted())); |
493 | 0a37ac21 | koutsoub | case 5://created |
494 | 0a37ac21 | koutsoub | return new DateComparator(ascending).compare(m1.getAuditInfo().getCreationDate(), m2.getAuditInfo().getCreationDate()); |
495 | 0a37ac21 | koutsoub | case 6://modified |
496 | 0a37ac21 | koutsoub | return new DateComparator(ascending).compare(m1.getAuditInfo().getModificationDate(), m2.getAuditInfo().getModificationDate()); |
497 | 0a37ac21 | koutsoub | default:
|
498 | 0a37ac21 | koutsoub | if(ascending)
|
499 | 0a37ac21 | koutsoub | return m1.getId().compareTo(m2.getId());
|
500 | 0a37ac21 | koutsoub | return m2.getId().compareTo(m1.getId());
|
501 | 0a37ac21 | koutsoub | } |
502 | 0a37ac21 | koutsoub | |
503 | 0a37ac21 | koutsoub | } |
504 | 0a37ac21 | koutsoub | } |
505 | 0a37ac21 | koutsoub | |
506 | 0a37ac21 | koutsoub | |
507 | 0a37ac21 | koutsoub | public final static class DateComparator implements Comparator<Date> { |
508 | 0a37ac21 | koutsoub | |
509 | 0a37ac21 | koutsoub | private final boolean ascending; |
510 | 0a37ac21 | koutsoub | |
511 | 0a37ac21 | koutsoub | public DateComparator(boolean isAscending) { |
512 | 0a37ac21 | koutsoub | ascending = isAscending; |
513 | 0a37ac21 | koutsoub | } |
514 | 0a37ac21 | koutsoub | |
515 | 0a37ac21 | koutsoub | @Override
|
516 | 0a37ac21 | koutsoub | public int compare(Date d1, Date d2) { |
517 | 0a37ac21 | koutsoub | if(d1==null && d2==null) |
518 | 0a37ac21 | koutsoub | return 0; |
519 | 0a37ac21 | koutsoub | if(d1==null && d2 != null) |
520 | 0a37ac21 | koutsoub | return -1; |
521 | 0a37ac21 | koutsoub | if(d2==null && d1 != null) |
522 | 0a37ac21 | koutsoub | return 1; |
523 | 0a37ac21 | koutsoub | if(ascending)
|
524 | 0a37ac21 | koutsoub | return d1.compareTo(d2);
|
525 | 0a37ac21 | koutsoub | return d2.compareTo(d1);
|
526 | 0a37ac21 | koutsoub | } |
527 | 0a37ac21 | koutsoub | } |
528 | 0a37ac21 | koutsoub | } |
529 | 0a37ac21 | koutsoub | |
530 | 0a37ac21 | koutsoub | |
531 | 0a37ac21 | koutsoub | |
532 | 0a37ac21 | koutsoub | } |