Revision 59634b15
Added by Andreas Kohlbecker over 6 years ago
src/main/java/eu/etaxonomy/vaadin/component/ToManyRelatedEntitiesListSelect.java | ||
---|---|---|
9 | 9 |
package eu.etaxonomy.vaadin.component; |
10 | 10 |
|
11 | 11 |
import java.util.ArrayList; |
12 |
import java.util.Arrays; |
|
12 | 13 |
import java.util.Collections; |
13 | 14 |
import java.util.List; |
14 | 15 |
|
... | ... | |
79 | 80 |
|
80 | 81 |
private GridLayout grid = new GridLayout(GRID_COLS, 1); |
81 | 82 |
|
83 |
private boolean creatingFields; |
|
84 |
|
|
82 | 85 |
public ToManyRelatedEntitiesListSelect(Class<V> itemType, Class<F> fieldType, String caption){ |
83 | 86 |
this.fieldType = fieldType; |
84 | 87 |
this.itemType = itemType; |
... | ... | |
226 | 229 |
} |
227 | 230 |
|
228 | 231 |
if(newValue != null){ |
229 |
|
|
230 | 232 |
// newValue is already converted, need to use the original value from the data source |
231 |
isOrderedCollection = List.class.isAssignableFrom(getPropertyDataSource().getValue().getClass()); |
|
232 |
|
|
233 |
boolean isListType = List.class.isAssignableFrom(getPropertyDataSource().getValue().getClass()); |
|
234 |
if(valueInitiallyWasNull && isOrderedCollection != isListType){ |
|
235 |
// need to reset the grid in this case, so that the button groups are created correctly |
|
236 |
grid.setRows(1); |
|
237 |
grid.removeAllComponents(); |
|
238 |
} |
|
239 |
isOrderedCollection = isListType; |
|
233 | 240 |
} |
234 | 241 |
|
235 |
createFieldsForData(); |
|
242 |
if(!creatingFields){ |
|
243 |
createFieldsForData(); |
|
244 |
} |
|
236 | 245 |
} |
237 | 246 |
|
238 | 247 |
private void createFieldsForData(){ |
239 | 248 |
|
240 |
grid.removeAllComponents(); |
|
241 |
grid.setRows(1); |
|
242 | 249 |
|
250 |
// for(int r = 0; r < grid.getRows(); r++){ |
|
251 |
// grid.getComponent(GRID_X_FIELD, r); |
|
252 |
// } |
|
253 |
// grid.removeAllComponents(); |
|
254 |
// grid.setRows(1); |
|
255 |
|
|
256 |
creatingFields = true; |
|
243 | 257 |
List<V> data = getValue(); |
244 | 258 |
if(data == null || data.isEmpty()){ |
245 |
addNewRow(0, null); |
|
246 |
} else { |
|
247 |
int row = 0; |
|
248 |
for(V val : data){ |
|
249 |
row = addNewRow(row, val); |
|
250 |
} |
|
259 |
// addNewRow(0, null); |
|
260 |
data = Arrays.asList((V)null); |
|
261 |
} |
|
262 |
//else { |
|
263 |
for(int row = 0; row < data.size(); row++){ |
|
264 |
boolean newRowNeeded = true; |
|
265 |
if(grid.getRows() > row){ |
|
266 |
Component fieldComponent = grid.getComponent(GRID_X_FIELD, row); |
|
267 |
if(fieldComponent != null){ |
|
268 |
newRowNeeded = false; |
|
269 |
Field field = (Field)fieldComponent; |
|
270 |
if(data.get(row) != null && field.getValue() != data.get(row)){ |
|
271 |
field.setValue(data.get(row)); |
|
272 |
} |
|
273 |
} |
|
274 |
|
|
275 |
} |
|
276 |
if(newRowNeeded){ |
|
277 |
row = addNewRow(row, data.get(row)); |
|
278 |
} |
|
279 |
// } |
|
251 | 280 |
} |
281 |
creatingFields = false; |
|
252 | 282 |
} |
253 | 283 |
|
254 | 284 |
/** |
... | ... | |
278 | 308 |
} |
279 | 309 |
|
280 | 310 |
/** |
281 |
* @param row |
|
311 |
* @param row the row index, starting from 0.
|
|
282 | 312 |
* @param val |
283 | 313 |
* @return |
284 | 314 |
*/ |
... | ... | |
397 | 427 |
// remove |
398 | 428 |
buttonGroup.getComponent(addButtonIndex + 1).setEnabled(field.getValue() != null); |
399 | 429 |
// up |
400 |
if(isOrderedCollection){ |
|
430 |
if(isOrderedCollection && buttonGroup.getComponentCount() > addButtonIndex + 2){
|
|
401 | 431 |
buttonGroup.getComponent(addButtonIndex + 2).setEnabled(!isFirst); |
402 | 432 |
// down |
403 | 433 |
buttonGroup.getComponent(addButtonIndex + 3).setEnabled(!isLast); |
Also available in: Unified diff
fixing loops in ToManyRelatedEntitiesListSelect