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 }

http://dive4elements.wald.intevation.org