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