// CreateBitSetNodeDialog public class CreateBitSetNodeDialog extends DefaultNodeSettingsPane { /* bits selector */ private final SettingsModelFilterString bits_selector_in_col; private final DialogComponentColumnFilter bits_selector_in_col_sel; /** * New pane for configuring the CreateBitSet node. */ protected CreateBitSetNodeDialog() { DataValueColumnFilter integerFilter = new DataValueColumnFilter(IntValue.class); bits_selector_in_col = new SettingsModelFilterString(CreateBitSetNodeModel.selectedProperties, CreateBitSetNodeModel.included_cols, CreateBitSetNodeModel.excluded_cols); bits_selector_in_col_sel = new DialogComponentColumnFilter(bits_selector_in_col, 0, true, integerFilter); super.addDialogComponent(bits_selector_in_col_sel); } } // CreateBitSetNodeModel @Override protected DataTableSpec[] configure(final DataTableSpec[] inSpecs) throws InvalidSettingsException { /* * Check for compatability */ boolean hasIntColumn = false; for(int i = 0; i < inSpecs[0].getNumColumns(); i++) { DataColumnSpec columnSpec = inSpecs[0].getColumnSpec(i); if(columnSpec.getType().isCompatible(IntValue.class)) //TODO: ensure that this works { // found one numeric column hasIntColumn = true; break; } } if(!hasIntColumn) { throw new InvalidSettingsException("Input table does not contain a at least one int column, please (re-)configure the node."); } /* * Create output spec */ List includedColumns = fingerprint_selected_in_col.getIncludeList(); DataTableSpec bitSetTableSpec = createBitSetTableSpec(inSpecs[0], includedColumns); // TODO: generated method stub return new DataTableSpec[]{bitSetTableSpec, null}; } /** * * @param inSpec * @param excludedColumns * @return */ private DataTableSpec createBitSetTableSpec(DataTableSpec inSpec, List includedColumns) { // Create the new column specs DataColumnSpec newColumnSpec = createOutputColumnSpec(); // Create a new table spec based on the new column spec DataTableSpec appendedSpec = new DataTableSpec(newColumnSpec); // Adjust input spec ColumnRearranger columns = createColumnRearranger(inSpec, includedColumns); DataTableSpec ammendedInputSpec = columns.createSpec(); // Join the original table spec and the new table spec DataTableSpec outputSpec = new DataTableSpec(ammendedInputSpec, appendedSpec); return outputSpec; } /** * Create the table spec for the new column * @return */ private DataColumnSpec createOutputColumnSpec() { // we want to add a column with the number of the bin DataColumnSpecCreator colSpecCreator = new DataColumnSpecCreator("BitSet", BitSetCell.TYPE); // now the column spec can be created DataColumnSpec newColumnSpec = colSpecCreator.createSpec(); return newColumnSpec; } /** * Column rearranger removing the included columns * @param in * @param excludedColumns * @return */ private ColumnRearranger createColumnRearranger(DataTableSpec in, List includedColumns) { ColumnRearranger columns = new ColumnRearranger(in); String[] colsToRemove = new String[includedColumns.size()]; //TODO: remove the unwanted columns for(int i = 0; i < includedColumns.size(); i++) { colsToRemove[i] = includedColumns.get(i); } columns.remove(colsToRemove); return columns; }