package de.mpicbg.knime.knutils; import org.knime.core.data.DataCell; import org.knime.core.data.DataColumnSpec; import org.knime.core.data.DataRow; import org.knime.core.data.DataTableSpec; import org.knime.core.node.BufferedDataTable; /** * Document me! * * @author Holger Brandl */ public class InputTableAttribute<AttributeType> extends Attribute<AttributeType> { private DataColumnSpec columnSpec; private Integer columnIndex; public InputTableAttribute(String attributeName, BufferedDataTable input) { this(attributeName, input.getSpec()); } public InputTableAttribute(String attributeName, DataTableSpec dataTableSpec) { this(findColumnByName(attributeName, dataTableSpec), dataTableSpec.findColumnIndex(attributeName)); } public InputTableAttribute(DataColumnSpec columnSpec, Integer columnIndex) { super(columnSpec.getName(), columnSpec.getType()); if (columnSpec == null) { throw new RuntimeException("column specs are null when creating attribute instance in column no" + columnIndex); } this.columnSpec = columnSpec; this.columnIndex = columnIndex; } public static DataColumnSpec findColumnByName(String attributeName, DataTableSpec dataTableSpec) { DataColumnSpec colSpec = dataTableSpec.getColumnSpec(attributeName); if (colSpec == null) { throw new IllegalArgumentException("Could not find attribute-column with name '" + attributeName + "'"); } return colSpec; } public Integer getColumnIndex() { return columnIndex; } public DataColumnSpec getColumnSpec() { return columnSpec; } @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof InputTableAttribute)) return false; InputTableAttribute attribute = (InputTableAttribute) o; if (!columnSpec.getName().equals(attribute.columnSpec.getName())) return false; return true; } @Override public int hashCode() { return columnSpec.getName().hashCode(); } public DataCell createCell(DataRow dataRow) { return createCell(getValue(dataRow)); } }