Statistics
| Branch: | Tag: | Revision:

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
}