Project

General

Profile

« Previous | Next » 

Revision a4939794

Added by Andreas Kohlbecker over 6 years ago

  • ID a4939794ec72c6086c94ddcce3ef745d6f5946b4
  • Parent d0242e14

fixing loops in ToManyRelatedEntitiesListSelect

View differences:

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