Mercurial > dive4elements > river
comparison gwt-client/src/main/java/org/dive4elements/river/client/client/ui/TableDataPanel.java @ 7602:c50dbbe17950
issue1596: Store table (cell) data twice: Once as (formatted) string
as coming from server, once transformed into float (or string).
The benefit is that now we can sort table data numerically, while keeping
the formatted and i18ned display of values.
author | Felix Wolfsteller <felix.wolfsteller@intevation.de> |
---|---|
date | Wed, 27 Nov 2013 14:55:25 +0100 |
parents | 46aeac6901d5 |
children | 9fc549a7f5cb |
comparison
equal
deleted
inserted
replaced
7601:46aeac6901d5 | 7602:c50dbbe17950 |
---|---|
140 nf = NumberFormat.getFormat("#.##"); | 140 nf = NumberFormat.getFormat("#.##"); |
141 } | 141 } |
142 | 142 |
143 String[] header = list.get(0); | 143 String[] header = list.get(0); |
144 String[] firstValues = list.get(1); | 144 String[] firstValues = list.get(1); |
145 String[] displayField = new String[header.length]; | |
145 | 146 |
146 ListGridField[] fields = new ListGridField[header.length]; | 147 ListGridField[] fields = new ListGridField[header.length]; |
147 | 148 |
148 for(int i = 0; i < header.length; i++) { | 149 for(int i = 0; i < header.length; i++) { |
149 ListGridField f = new ListGridField(String.valueOf(i)); | 150 ListGridField f = new ListGridField(String.valueOf(i)); |
155 f.setType(ListGridFieldType.FLOAT); | 156 f.setType(ListGridFieldType.FLOAT); |
156 } | 157 } |
157 catch (NumberFormatException nfe) { | 158 catch (NumberFormatException nfe) { |
158 f.setType(ListGridFieldType.TEXT); | 159 f.setType(ListGridFieldType.TEXT); |
159 } | 160 } |
161 // To keep server-side formatting and i18n also of | |
162 // float values, we will store the value once formatted 'as is' | |
163 // to be displayed and once as e.g. float to allow functions like | |
164 // sorting on it. | |
165 displayField[i] = i + "_displayField"; | |
166 f.setDisplayField(displayField[i]); | |
167 f.setValueField(String.valueOf(i)); | |
168 f.setSortByDisplayField(false); | |
160 } | 169 } |
161 | 170 |
162 dataTable.setFields(fields); | 171 dataTable.setFields(fields); |
163 | 172 |
164 for(int i = 1; i < list.size(); i++) { | 173 for(int i = 1; i < list.size(); i++) { |
165 String[] sItem = list.get(i); | 174 String[] sItem = list.get(i); |
166 ListGridRecord r = new ListGridRecord(); | 175 ListGridRecord r = new ListGridRecord(); |
167 for(int j = 0; j < sItem.length; j++) { | 176 for(int j = 0; j < sItem.length; j++) { |
168 r.setAttribute(String.valueOf(j), sItem[j]); | 177 // See above, display 'as is' from server, but keep value |
178 // in machine-usable way (float), to allow numeric sorting. | |
179 r.setAttribute(displayField[j], sItem[j]); | |
180 if (fields[j].getType() == ListGridFieldType.TEXT) { | |
181 r.setAttribute(String.valueOf(j), sItem[j]); | |
182 } | |
183 else { | |
184 r.setAttribute(String.valueOf(j), nf.parse(sItem[j])); | |
185 } | |
169 } | 186 } |
170 dataTable.addData(r); | 187 dataTable.addData(r); |
171 } | 188 } |
172 } | 189 } |
173 } | 190 } |