@Override
 public Object getValueAt(int rowIndex, int columnIndex) {
   if (columnIndex == 0) { // RowNo.
     if (rowIndex == IS_SELECTED_ROW) {
       // return true for global column selection editor if at least one column is
       // selected.
       for (AttributeColumn col : reader.getAllAttributeColumns()) {
         if (col.isActivated()) {
           return true;
         }
       }
       return false;
     }
     return "";
   }
   columnIndex--;
   if (rowIndex == ATTRIBUTE_NAME_ROW) {
     return reader.getAttributeColumn(columnIndex).getName();
   }
   if (rowIndex == VALUE_TYPE_ROW) {
     return Ontology.VALUE_TYPE_NAMES[reader.getAttributeColumn(columnIndex).getValueType()];
   }
   if (rowIndex == IS_SELECTED_ROW) {
     return reader.getAttributeColumn(columnIndex).isActivated();
   }
   if (rowIndex == ROLE_ROW) {
     return reader.getAttributeColumn(columnIndex).getRole();
   }
   return null;
 }
 @Override
 public void setValueAt(Object value, int row, int column) {
   if (column == 0) { // RowNo.
     if (row == IS_SELECTED_ROW) {
       for (AttributeColumn col : reader.getAllAttributeColumns()) {
         col.activateColumn((Boolean) value);
       }
       repaint();
     }
     return;
   }
   column--;
   if (row == ATTRIBUTE_NAME_ROW) {
     reader.setAttributeNamesDefinedByUser(true);
     reader.getAttributeColumn(column).setName((String) value);
   }
   if (row == VALUE_TYPE_ROW) {
     // update only if its not the same value
     if (reader.getAttributeColumn(column).getValueType()
         != Ontology.ATTRIBUTE_VALUE_TYPE.mapName(value.toString())) {
       reader
           .getAttributeColumn(column)
           .setValueType(Ontology.ATTRIBUTE_VALUE_TYPE.mapName(value.toString()));
     }
   }
   if (row == IS_SELECTED_ROW) {
     reader.getAttributeColumn(column).activateColumn((Boolean) value);
   }
   if (row == ROLE_ROW) {
     String role = (String) value;
     if (role.equals(AttributeColumn.REGULAR)) {
       reader.getAttributeColumn(column).setRole(role);
     } else {
       for (AttributeColumn attColumn : reader.getAllAttributeColumns()) {
         if (attColumn.getRole().equals(role)) {
           attColumn.setRole(AttributeColumn.REGULAR);
         }
       }
       reader.getAttributeColumn(column).setRole(role);
       fireTableDataChanged();
     }
   }
   repaint();
 }