removeExtension(column.getRenderer());
}
+ /**
+ * Sets the columns and their order for the grid. Current columns whose
+ * property id is not in propertyIds are removed. Similarly, a column is
+ * added for any property id in propertyIds that has no corresponding column
+ * in this Grid.
+ *
+ * @param propertyIds
+ * properties in the desired column order
+ */
+ public void setColumns(Object... propertyIds) {
+ Set<?> removePids = new HashSet<Object>(columns.keySet());
+ removePids.removeAll(Arrays.asList(propertyIds));
+ for (Object removePid : removePids) {
+ removeColumn(removePid);
+ }
+ Set<?> addPids = new HashSet<Object>(Arrays.asList(propertyIds));
+ addPids.removeAll(columns.keySet());
+ for (Object propertyId : addPids) {
+ addColumn(propertyId);
+ }
+ setColumnOrder(propertyIds);
+ }
+
/**
* Sets a new column order for the grid. All columns which are not ordered
* here will remain in the order they were before as the last columns of
import java.lang.reflect.Field;
import java.lang.reflect.Method;
+import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Set;
assertEquals("Column sortability changed when re-adding", sortable,
grid.getColumn("column1").isSortable());
}
+
+ @Test
+ public void testSetColumns() {
+ grid.setColumns("column7", "column0", "column9");
+ Iterator<Column> it = grid.getColumns().iterator();
+ assertEquals(it.next().getPropertyId(), "column7");
+ assertEquals(it.next().getPropertyId(), "column0");
+ assertEquals(it.next().getPropertyId(), "column9");
+ assertFalse(it.hasNext());
+ }
+
+ @Test
+ public void testAddingColumnsWithSetColumns() {
+ Grid g = new Grid();
+ g.setColumns("c1", "c2", "c3");
+ Iterator<Column> it = g.getColumns().iterator();
+ assertEquals(it.next().getPropertyId(), "c1");
+ assertEquals(it.next().getPropertyId(), "c2");
+ assertEquals(it.next().getPropertyId(), "c3");
+ assertFalse(it.hasNext());
+ }
+
+ @Test(expected = IllegalStateException.class)
+ public void testAddingColumnsWithSetColumnsNonDefaultContainer() {
+ grid.setColumns("column1", "column2", "column50");
+ }
}