class AttributeDataColumn<T extends Element> implements ElementDataColumn<T> {

    private final AttributeColumnsController attributeColumnsController;
    private final Column column;
    private final Class<?> columnClassForTable;

    public AttributeDataColumn(AttributeColumnsController attributeColumnsController, Column column) {
        this.attributeColumnsController = attributeColumnsController;
        this.column = column;

        this.columnClassForTable = column.getTypeClass();
    }

    @Override
    public Class<?> getColumnClass() {
        return columnClassForTable;
    }

    @Override
    public String getColumnName() {
        return column.getTitle();
    }

    @Override
    public Object getValueFor(T element) {
        return element.getAttribute(column);
    }

    @Override
    public int hashCode() {
        int hash = 5;
        hash = 89 * hash + (this.column != null ? this.column.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object obj) {<FILL_FUNCTION_BODY>}

    @Override
    public void setValueFor(T element, Object value) {
        attributeColumnsController.setAttributeValue(value, element, column);
    }

    @Override
    public boolean isEditable() {
        return attributeColumnsController.canChangeColumnData(column);
    }

    @Override
    public Column getColumn() {
        return column;
    }
}

        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final AttributeDataColumn other = (AttributeDataColumn) obj;
        return this.column == other.column || (this.column != null && this.column.equals(other.column));
    
<no_super_class>