@Override public void updateColumnWidth(String columnId, int newWidth) { TableModel model = this.tableModel.get(); List<TableColumn> updatedColumns = new ArrayList<>(); for (TableColumn column : model.getColumns()) { if(column.getId().equals(columnId)) { updatedColumns.add(ImmutableTableColumn.builder().from(column).width(newWidth).build()); } else { updatedColumns.add(column); } } tableModel.updateIfNotSame(ImmutableTableModel.builder() .from(model) .columns(updatedColumns) .build()); }
public TableColumn updatedModel() { TableColumn updatedModel = model; // Only updated the label if it has been explicitly changed. // Otherwise leave it implicit so that it will reflect changes to the // field's label if(updatedLabel != null && !updatedLabel.equals(effectiveLabel)) { updatedModel = ImmutableTableColumn.builder() .from(updatedModel) .label(updatedLabel) .build(); } return updatedModel; } }
@Test public void test() { TableModel tableModel = ImmutableTableModel.builder() .formId(setup.getSurveyForm().getFormId()) .build(); TableViewModel viewModel = new TableViewModel(setup.getFormStore(), tableModel); Connection<EffectiveTableModel> view = setup.connect(viewModel.getEffectiveTable()); EffectiveTableModel effectiveTableModel = view.assertLoaded(); EffectiveTableColumn nameColumn = effectiveTableModel.getColumns().get(0); assertThat(nameColumn.getLabel(), equalTo("Respondent Name")); // Now verify that we can update the column label view.resetChangeCounter(); TableColumn updatedColumn = ImmutableTableColumn.builder() .from(nameColumn.getModel()) .label("MY column") .build(); viewModel.update(ImmutableTableModel.builder() .from(tableModel) .columns(Arrays.asList(updatedColumn)) .build()); setup.runScheduled(); // Should receive a change event... view.assertChanged(); EffectiveTableModel updatedModel = view.assertLoaded(); assertThat(updatedModel.getColumns().get(0).getLabel(), equalTo("MY column")); }