Search in sources :

Example 1 with AggregationFunction

use of org.knime.core.node.port.database.aggregation.AggregationFunction in project knime-core by knime.

the class AggregationFunctionAndRowTableCellRenderer method getTableCellRendererComponent.

/**
 * {@inheritDoc}
 */
@Override
public Component getTableCellRendererComponent(final JTable table, final Object value, final boolean isSelected, final boolean hasFocus, final int row, final int column) {
    final Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
    assert (c == this);
    final AggregationFunction function;
    if (value instanceof AggregationFunctionRow) {
        function = ((AggregationFunctionRow<?>) value).getFunction();
    } else if (value instanceof AggregationFunction) {
        function = (AggregationFunction) value;
    } else {
        function = null;
    }
    if (function != null) {
        if (function instanceof InvalidAggregationFunction) {
            // set a red border for invalid methods
            setBorder(BorderFactory.createLineBorder(Color.RED));
        } else {
            setBorder(null);
        }
        setText(function.getLabel());
        setToolTipText(function.getDescription());
    }
    return this;
}
Also used : InvalidAggregationFunction(org.knime.core.node.port.database.aggregation.InvalidAggregationFunction) AggregationFunction(org.knime.core.node.port.database.aggregation.AggregationFunction) InvalidAggregationFunction(org.knime.core.node.port.database.aggregation.InvalidAggregationFunction) Component(java.awt.Component)

Example 2 with AggregationFunction

use of org.knime.core.node.port.database.aggregation.AggregationFunction in project knime-core by knime.

the class AbstractAggregationFunctionTableCellEditor method getTableCellEditorComponent.

/**
 * {@inheritDoc}
 */
@Override
public Component getTableCellEditorComponent(final JTable table, final Object value, final boolean isSelected, final int rowIdx, final int column) {
    if (value instanceof AggregationFunctionRow<?>) {
        @SuppressWarnings("unchecked") R row = (R) value;
        final DataType type = getDataType(table, row, isSelected, rowIdx, column);
        final AggregationFunction selectedMethod = getSelectedAggregationMethod(table, row, isSelected, rowIdx, column);
        final List<? extends AggregationFunction> compatibleMethods = getCompatibleMethods(type);
        if (type != null) {
            getBox().update(type, compatibleMethods, selectedMethod);
        }
    }
    return super.getTableCellEditorComponent(table, value, isSelected, rowIdx, column);
}
Also used : AggregationFunction(org.knime.core.node.port.database.aggregation.AggregationFunction) DataType(org.knime.core.data.DataType)

Example 3 with AggregationFunction

use of org.knime.core.node.port.database.aggregation.AggregationFunction in project knime-core by knime.

the class AggregationFunctionAndRowListCellRenderer method getListCellRendererComponent.

/**
 * {@inheritDoc}
 */
@Override
public Component getListCellRendererComponent(final JList<?> list, final Object value, final int index, final boolean isSelected, final boolean cellHasFocus) {
    final Component c = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
    assert (c == this);
    final AggregationFunction function;
    if (value instanceof AggregationFunctionRow) {
        function = ((AggregationFunctionRow<?>) value).getFunction();
    } else if (value instanceof AggregationFunction) {
        function = (AggregationFunction) value;
    } else {
        function = null;
    }
    if (function != null) {
        setText(function.getLabel());
        setToolTipText(function.getDescription());
    }
    return this;
}
Also used : AggregationFunction(org.knime.core.node.port.database.aggregation.AggregationFunction) Component(java.awt.Component)

Example 4 with AggregationFunction

use of org.knime.core.node.port.database.aggregation.AggregationFunction in project knime-core by knime.

the class AggregationFunctionComboBox method contentsChanged.

@Override
public void contentsChanged(final ListDataEvent e) {
    Object oldSelection = selectedItemReminder;
    Object newSelection = dataModel.getSelectedItem();
    if (oldSelection == newSelection) {
        return;
    }
    if ((oldSelection == null || oldSelection instanceof AggregationFunction) && (newSelection instanceof AggregationFunction)) {
        final AggregationFunction oldFunction = (AggregationFunction) oldSelection;
        final AggregationFunction newFunction = (AggregationFunction) newSelection;
        if (oldFunction == null || !oldFunction.getId().equals(newFunction.getId())) {
            selectedItemChanged();
            if (!m_selectingItem) {
                fireActionEvent();
            }
        }
    } else {
        super.contentsChanged(e);
    }
}
Also used : AggregationFunction(org.knime.core.node.port.database.aggregation.AggregationFunction)

Example 5 with AggregationFunction

use of org.knime.core.node.port.database.aggregation.AggregationFunction in project knime-core by knime.

the class DBGroupByNodeModel2 method configure.

/**
 * {@inheritDoc}
 */
@Override
protected PortObjectSpec[] configure(final PortObjectSpec[] inSpecs) throws InvalidSettingsException {
    final DatabasePortObjectSpec dbSpec = (DatabasePortObjectSpec) inSpecs[0];
    final DataTableSpec tableSpec = dbSpec.getDataTableSpec();
    final DatabaseQueryConnectionSettings connection = dbSpec.getConnectionSettings(null);
    final String dbIdentifier = connection.getDatabaseIdentifier();
    final List<DBColumnAggregationFunctionRow> columnFunctions = DBColumnAggregationFunctionRow.loadFunctions(m_settings, DBGroupByNodeModel2.CFG_AGGREGATION_FUNCTIONS, dbIdentifier, tableSpec);
    final ArrayList<DBColumnAggregationFunctionRow> invalidColAggrs = new ArrayList<>(1);
    final Set<String> usedColNames = new HashSet<>(tableSpec.getNumColumns());
    usedColNames.addAll(m_groupByCols.getIncludeList());
    m_aggregationFunction2Use.clear();
    for (DBColumnAggregationFunctionRow row : columnFunctions) {
        final DataColumnSpec columnSpec = row.getColumnSpec();
        final DataColumnSpec inputSpec = tableSpec.getColumnSpec(columnSpec.getName());
        final AggregationFunction function = row.getFunction();
        if (inputSpec == null || !inputSpec.getType().equals(columnSpec.getType())) {
            invalidColAggrs.add(row);
            continue;
        }
        if (function instanceof InvalidAggregationFunction) {
            throw new InvalidSettingsException(((InvalidAggregationFunction) function).getErrorMessage());
        }
        if (function.hasOptionalSettings()) {
            try {
                function.configure(tableSpec);
            } catch (InvalidSettingsException e) {
                throw new InvalidSettingsException("Exception in aggregation function " + function.getLabel() + " of column " + row.getColumnSpec().getName() + ": " + e.getMessage());
            }
        }
        usedColNames.add(row.getColumnSpec().getName());
        m_aggregationFunction2Use.add(row);
    }
    final List<DBPatternAggregationFunctionRow> patternFunctions = DBPatternAggregationFunctionRow.loadFunctions(m_settings, CFG_PATTERN_AGGREGATION_FUNCTIONS, dbIdentifier, tableSpec);
    if (tableSpec.getNumColumns() > usedColNames.size() && !patternFunctions.isEmpty()) {
        for (final DataColumnSpec spec : tableSpec) {
            if (!usedColNames.contains(spec.getName())) {
                for (final DBPatternAggregationFunctionRow patternFunction : patternFunctions) {
                    final Pattern pattern = patternFunction.getRegexPattern();
                    final DBAggregationFunction function = patternFunction.getFunction();
                    if (pattern != null && pattern.matcher(spec.getName()).matches() && function.isCompatible(spec.getType())) {
                        final DBColumnAggregationFunctionRow row = new DBColumnAggregationFunctionRow(spec, patternFunction.getFunction());
                        m_aggregationFunction2Use.add(row);
                        usedColNames.add(spec.getName());
                    }
                }
            }
        }
    }
    final List<DBDataTypeAggregationFunctionRow> typeFunctions = DBDataTypeAggregationFunctionRow.loadFunctions(m_settings, CFG_TYPE_AGGREGATION_FUNCTIONS, dbIdentifier, tableSpec);
    // check if some columns are left
    if (tableSpec.getNumColumns() > usedColNames.size() && !typeFunctions.isEmpty()) {
        for (final DataColumnSpec spec : tableSpec) {
            if (!usedColNames.contains(spec.getName())) {
                final DataType dataType = spec.getType();
                for (final DBDataTypeAggregationFunctionRow typeAggregator : typeFunctions) {
                    if (typeAggregator.isCompatibleType(dataType)) {
                        final DBColumnAggregationFunctionRow row = new DBColumnAggregationFunctionRow(spec, typeAggregator.getFunction());
                        m_aggregationFunction2Use.add(row);
                        usedColNames.add(spec.getName());
                    }
                }
            }
        }
    }
    if (m_groupByCols.getIncludeList().isEmpty() && m_aggregationFunction2Use.isEmpty() && !m_addCountStar.getBooleanValue()) {
        throw new InvalidSettingsException("Please select at least one group or aggregation function or the " + "COUNT(*) option.");
    }
    if (!invalidColAggrs.isEmpty()) {
        setWarningMessage(invalidColAggrs.size() + " aggregation functions ignored due to incompatible columns.");
    }
    return new PortObjectSpec[] { createDbOutSpec(dbSpec, true) };
}
Also used : Pattern(java.util.regex.Pattern) DataTableSpec(org.knime.core.data.DataTableSpec) InvalidAggregationFunction(org.knime.core.node.port.database.aggregation.InvalidAggregationFunction) ArrayList(java.util.ArrayList) SettingsModelFilterString(org.knime.core.node.defaultnodesettings.SettingsModelFilterString) SettingsModelString(org.knime.core.node.defaultnodesettings.SettingsModelString) DBPatternAggregationFunctionRow(org.knime.base.node.io.database.groupby.dialog.pattern.DBPatternAggregationFunctionRow) InvalidAggregationFunction(org.knime.core.node.port.database.aggregation.InvalidAggregationFunction) DBAggregationFunction(org.knime.core.node.port.database.aggregation.DBAggregationFunction) AggregationFunction(org.knime.core.node.port.database.aggregation.AggregationFunction) DatabaseQueryConnectionSettings(org.knime.core.node.port.database.DatabaseQueryConnectionSettings) DataColumnSpec(org.knime.core.data.DataColumnSpec) InvalidSettingsException(org.knime.core.node.InvalidSettingsException) DBColumnAggregationFunctionRow(org.knime.base.node.io.database.groupby.dialog.column.DBColumnAggregationFunctionRow) DBAggregationFunction(org.knime.core.node.port.database.aggregation.DBAggregationFunction) DatabasePortObjectSpec(org.knime.core.node.port.database.DatabasePortObjectSpec) PortObjectSpec(org.knime.core.node.port.PortObjectSpec) DatabasePortObjectSpec(org.knime.core.node.port.database.DatabasePortObjectSpec) DataType(org.knime.core.data.DataType) DBDataTypeAggregationFunctionRow(org.knime.base.node.io.database.groupby.dialog.type.DBDataTypeAggregationFunctionRow) HashSet(java.util.HashSet)

Aggregations

AggregationFunction (org.knime.core.node.port.database.aggregation.AggregationFunction)8 InvalidAggregationFunction (org.knime.core.node.port.database.aggregation.InvalidAggregationFunction)3 Component (java.awt.Component)2 ArrayList (java.util.ArrayList)2 HashSet (java.util.HashSet)2 DBColumnAggregationFunctionRow (org.knime.base.node.io.database.groupby.dialog.column.DBColumnAggregationFunctionRow)2 DataColumnSpec (org.knime.core.data.DataColumnSpec)2 DataTableSpec (org.knime.core.data.DataTableSpec)2 DataType (org.knime.core.data.DataType)2 InvalidSettingsException (org.knime.core.node.InvalidSettingsException)2 SettingsModelFilterString (org.knime.core.node.defaultnodesettings.SettingsModelFilterString)2 SettingsModelString (org.knime.core.node.defaultnodesettings.SettingsModelString)2 PortObjectSpec (org.knime.core.node.port.PortObjectSpec)2 DatabasePortObjectSpec (org.knime.core.node.port.database.DatabasePortObjectSpec)2 DatabaseQueryConnectionSettings (org.knime.core.node.port.database.DatabaseQueryConnectionSettings)2 DBAggregationFunction (org.knime.core.node.port.database.aggregation.DBAggregationFunction)2 Pattern (java.util.regex.Pattern)1 DBPatternAggregationFunctionRow (org.knime.base.node.io.database.groupby.dialog.pattern.DBPatternAggregationFunctionRow)1 DBDataTypeAggregationFunctionRow (org.knime.base.node.io.database.groupby.dialog.type.DBDataTypeAggregationFunctionRow)1 CanceledExecutionException (org.knime.core.node.CanceledExecutionException)1