### Question:
ColumnDefinitionTableModel extends AbstractTableModel { @Override public boolean isCellEditable(int rowIndex, int columnIndex) { boolean isEditable = true; if (columnIndex == 3) { isEditable = myIsFormatEditable; if (isEditable) { ColumnDefinitionRow row = myRows.get(rowIndex); isEditable = StringUtils.isNotEmpty(row.getDataType()); } } return isEditable; }  void addRows(List<ColumnDefinitionRow> rows); void clear(); @Override Class<?> getColumnClass(int columnIndex); @Override int getColumnCount(); @Override String getColumnName(int column); ColumnDefinitionRow getRow(int rowIndex); @Override int getRowCount(); @Override Object getValueAt(int rowIndex, int columnIndex); @Override boolean isCellEditable(int rowIndex, int columnIndex); boolean isImportAllColumns(); void setFormatEditable(boolean isEditable); @Override void setValueAt(Object aValue, int rowIndex, int columnIndex);  }### Answer:
@Test public void testIsCellEditable() { ColumnDefinitionTableModel model = new ColumnDefinitionTableModel(); ColumnDefinitionRow row = new ColumnDefinitionRow(); model.addRows(New.list(row)); assertTrue(model.isCellEditable(0, 0)); assertTrue(model.isCellEditable(0, 1)); assertTrue(model.isCellEditable(0, 2)); assertFalse(model.isCellEditable(0, 3)); row.setDataType("Date"); assertTrue(model.isCellEditable(0, 3)); }