Search in sources :

Example 1 with DialogNodeValue

use of org.knime.core.node.dialog.DialogNodeValue in project knime-core by knime.

the class SubNodeContainer method performValidateSettings.

/**
 * {@inheritDoc}
 */
@SuppressWarnings("rawtypes")
@Override
void performValidateSettings(final NodeSettingsRO modelSettings) throws InvalidSettingsException {
    Map<NodeID, DialogNode> nodes = m_wfm.findNodes(DialogNode.class, false);
    for (Map.Entry<NodeID, DialogNode> entry : nodes.entrySet()) {
        NodeID id = entry.getKey();
        DialogNode node = entry.getValue();
        String parameterName = getDialogNodeParameterName(node, id);
        if (modelSettings.containsKey(parameterName)) {
            NodeSettingsRO conf = modelSettings.getNodeSettings(parameterName);
            NodeContext.pushContext(m_wfm.getNodeContainer(id));
            try {
                final DialogNodeValue validationDialogValue = node.createEmptyDialogValue();
                validationDialogValue.loadFromNodeSettings(conf);
                node.validateDialogValue(validationDialogValue);
            } catch (InvalidSettingsException ise) {
                throw ise;
            } catch (Throwable e) {
                LOGGER.coding("Settings validation threw \"" + e.getClass().getSimpleName() + "\": " + e.getMessage(), e);
                throw new InvalidSettingsException(e.getMessage(), e);
            } finally {
                NodeContext.removeLastContext();
            }
        }
    }
}
Also used : InvalidSettingsException(org.knime.core.node.InvalidSettingsException) NodeSettingsRO(org.knime.core.node.NodeSettingsRO) DialogNode(org.knime.core.node.dialog.DialogNode) MetaNodeDialogNode(org.knime.core.node.dialog.MetaNodeDialogNode) DialogNodeValue(org.knime.core.node.dialog.DialogNodeValue) Map(java.util.Map) HashMap(java.util.HashMap)

Example 2 with DialogNodeValue

use of org.knime.core.node.dialog.DialogNodeValue in project knime-core by knime.

the class MetaNodeDialogPane method loadSettingsFrom.

/**
 * {@inheritDoc}
 */
@Override
protected void loadSettingsFrom(final NodeSettingsRO settings, final PortObjectSpec[] specs) throws NotConfigurableException {
    // we may have quickform nodes to allow a column selection?)
    for (Map.Entry<NodeID, MetaNodeDialogNode> e : m_nodes.entrySet()) {
        if (e.getValue() instanceof QuickFormInputNode) {
            AbstractQuickFormConfiguration config = ((QuickFormInputNode) e.getValue()).getConfiguration();
            AbstractQuickFormValueInConfiguration valueConfig = config.getValueConfiguration();
            try {
                NodeSettingsRO subSettings = settings.getNodeSettings(Integer.toString(e.getKey().getIndex()));
                valueConfig.loadValueInDialog(subSettings);
                QuickFormConfigurationPanel panel = m_quickFormInputNodePanels.get(e.getKey());
                assert panel != null : "No panel instance for node " + e.getKey();
                panel.loadSettings(valueConfig);
            } catch (InvalidSettingsException ise) {
            // no op
            }
        } else if (e.getValue() instanceof DialogNode) {
            final DialogNode dialogNode = (DialogNode) e.getValue();
            final DialogNodeValue nodeValue = dialogNode.createEmptyDialogValue();
            final String parameterName = SubNodeContainer.getDialogNodeParameterName(dialogNode, e.getKey());
            try {
                NodeSettingsRO subSettings = settings.getNodeSettings(parameterName);
                nodeValue.loadFromNodeSettingsInDialog(subSettings);
                final DialogNodePanel dialogNodePanel = m_dialogNodePanels.get(e.getKey());
                dialogNodePanel.loadNodeValue(nodeValue);
            } catch (InvalidSettingsException ex) {
            // no op
            }
        }
    }
}
Also used : AbstractQuickFormValueInConfiguration(org.knime.core.quickform.AbstractQuickFormValueInConfiguration) QuickFormInputNode(org.knime.core.quickform.in.QuickFormInputNode) QuickFormConfigurationPanel(org.knime.core.quickform.QuickFormConfigurationPanel) DialogNode(org.knime.core.node.dialog.DialogNode) MetaNodeDialogNode(org.knime.core.node.dialog.MetaNodeDialogNode) AbstractQuickFormConfiguration(org.knime.core.quickform.AbstractQuickFormConfiguration) MetaNodeDialogNode(org.knime.core.node.dialog.MetaNodeDialogNode) InvalidSettingsException(org.knime.core.node.InvalidSettingsException) NodeSettingsRO(org.knime.core.node.NodeSettingsRO) DialogNodeValue(org.knime.core.node.dialog.DialogNodeValue) LinkedHashMap(java.util.LinkedHashMap) Map(java.util.Map) DialogNodePanel(org.knime.core.node.dialog.DialogNodePanel)

Example 3 with DialogNodeValue

use of org.knime.core.node.dialog.DialogNodeValue in project knime-core by knime.

the class MetaNodeDialogPane method saveSettingsTo.

/**
 * {@inheritDoc}
 */
@Override
protected void saveSettingsTo(final NodeSettingsWO settings) throws InvalidSettingsException {
    for (Map.Entry<NodeID, MetaNodeDialogNode> e : m_nodes.entrySet()) {
        final NodeID key = e.getKey();
        if (e.getValue() instanceof QuickFormInputNode) {
            AbstractQuickFormConfiguration config = ((QuickFormInputNode) e.getValue()).getConfiguration();
            AbstractQuickFormValueInConfiguration valueConfig = config.createValueConfiguration();
            QuickFormConfigurationPanel value = m_quickFormInputNodePanels.get(key);
            value.saveSettings(valueConfig);
            NodeSettingsWO subSettings = settings.addNodeSettings((Integer.toString(key.getIndex())));
            valueConfig.saveValue(subSettings);
        } else if (e.getValue() instanceof DialogNode) {
            DialogNode dialogNode = (DialogNode) e.getValue();
            DialogNodePanel nodePanel = m_dialogNodePanels.get(key);
            DialogNodeValue nodeValue = nodePanel.getNodeValue();
            final String parameterName = SubNodeContainer.getDialogNodeParameterName(dialogNode, key);
            if (nodeValue != null) {
                NodeSettingsWO subSettings = settings.addNodeSettings((parameterName));
                nodeValue.saveToNodeSettings(subSettings);
            }
        }
    }
}
Also used : AbstractQuickFormValueInConfiguration(org.knime.core.quickform.AbstractQuickFormValueInConfiguration) NodeSettingsWO(org.knime.core.node.NodeSettingsWO) QuickFormInputNode(org.knime.core.quickform.in.QuickFormInputNode) QuickFormConfigurationPanel(org.knime.core.quickform.QuickFormConfigurationPanel) DialogNode(org.knime.core.node.dialog.DialogNode) MetaNodeDialogNode(org.knime.core.node.dialog.MetaNodeDialogNode) AbstractQuickFormConfiguration(org.knime.core.quickform.AbstractQuickFormConfiguration) MetaNodeDialogNode(org.knime.core.node.dialog.MetaNodeDialogNode) DialogNodeValue(org.knime.core.node.dialog.DialogNodeValue) LinkedHashMap(java.util.LinkedHashMap) Map(java.util.Map) DialogNodePanel(org.knime.core.node.dialog.DialogNodePanel)

Example 4 with DialogNodeValue

use of org.knime.core.node.dialog.DialogNodeValue in project knime-core by knime.

the class MetaNodeDialogPane method setQuickformNodes.

/**
 * Set quickform nodes into this dialog; called just before
 * {@link #loadSettingsFrom(NodeSettingsRO,
 * org.knime.core.data.DataTableSpec[])} is called.
 * @param nodes the quickform nodes to show settings for
 */
final void setQuickformNodes(final Map<NodeID, MetaNodeDialogNode> nodes) {
    m_nodes.clear();
    m_quickFormInputNodePanels.clear();
    m_dialogNodePanels.clear();
    // remove all quickform components from current panel
    m_panel.removeAll();
    List<Pair<Integer, Pair<NodeID, MetaNodeDialogNode>>> sortedNodeList = new ArrayList<Pair<Integer, Pair<NodeID, MetaNodeDialogNode>>>();
    for (Map.Entry<NodeID, MetaNodeDialogNode> e : nodes.entrySet()) {
        // only accept old qf nodes for metanodes
        if (!m_usedInSubnode && e.getValue() instanceof QuickFormInputNode) {
            AbstractQuickFormConfiguration<? extends AbstractQuickFormValueInConfiguration> config = ((QuickFormInputNode) e.getValue()).getConfiguration();
            if (config == null) {
                // quickform nodes has no valid configuration
                continue;
            }
            QuickFormConfigurationPanel<? extends AbstractQuickFormValueInConfiguration> quickform = config.createController();
            m_nodes.put(e.getKey(), e.getValue());
            m_quickFormInputNodePanels.put(e.getKey(), quickform);
            Pair<Integer, Pair<NodeID, MetaNodeDialogNode>> weightNodePair = new Pair<Integer, Pair<NodeID, MetaNodeDialogNode>>(config.getWeight(), new Pair<NodeID, MetaNodeDialogNode>(e.getKey(), e.getValue()));
            sortedNodeList.add(weightNodePair);
        // only accept new qf nodes for subnodes
        } else if (m_usedInSubnode && e.getValue() instanceof DialogNode) {
            DialogNodeRepresentation<? extends DialogNodeValue> representation = ((DialogNode) e.getValue()).getDialogRepresentation();
            if (((DialogNode) e.getValue()).isHideInDialog() || representation == null) {
                // no valid representation
                continue;
            }
            try {
                DialogNodePanel dialogPanel = representation.createDialogPanel();
                m_nodes.put(e.getKey(), e.getValue());
                m_dialogNodePanels.put(e.getKey(), dialogPanel);
                Pair<Integer, Pair<NodeID, MetaNodeDialogNode>> weightNodePair = new Pair<Integer, Pair<NodeID, MetaNodeDialogNode>>(Integer.MAX_VALUE, new Pair<NodeID, MetaNodeDialogNode>(e.getKey(), e.getValue()));
                sortedNodeList.add(weightNodePair);
            } catch (Exception ex) {
                LOGGER.error("The dialog pane for node " + e.getKey() + " could not be created.", ex);
            }
        }
    }
    Collections.sort(sortedNodeList, new Comparator<Pair<Integer, Pair<NodeID, MetaNodeDialogNode>>>() {

        /**
         * {@inheritDoc}
         */
        @Override
        public int compare(final Pair<Integer, Pair<NodeID, MetaNodeDialogNode>> o1, final Pair<Integer, Pair<NodeID, MetaNodeDialogNode>> o2) {
            return o1.getFirst() - o2.getFirst();
        }
    });
    for (Pair<Integer, Pair<NodeID, MetaNodeDialogNode>> weightNodePair : sortedNodeList) {
        NodeID id = weightNodePair.getSecond().getFirst();
        MetaNodeDialogNode node = weightNodePair.getSecond().getSecond();
        if (node instanceof QuickFormInputNode) {
            final QuickFormConfigurationPanel<?> qconfPanel = m_quickFormInputNodePanels.get(id);
            JPanel qpanel = new JPanel();
            final BoxLayout boxLayout2 = new BoxLayout(qpanel, BoxLayout.Y_AXIS);
            qpanel.setLayout(boxLayout2);
            qpanel.setBorder(BorderFactory.createTitledBorder((String) null));
            JPanel p = new JPanel(new FlowLayout(FlowLayout.LEFT));
            p.add(qconfPanel);
            qpanel.add(p);
            m_panel.add(qpanel);
        } else if (node instanceof DialogNode) {
            DialogNodePanel<? extends DialogNodeValue> nodePanel = m_dialogNodePanels.get(id);
            JPanel dpanel = new JPanel();
            final BoxLayout boxLayout2 = new BoxLayout(dpanel, BoxLayout.Y_AXIS);
            dpanel.setLayout(boxLayout2);
            dpanel.setBorder(BorderFactory.createTitledBorder((String) null));
            JPanel p = new JPanel(new BorderLayout());
            p.add(nodePanel, BorderLayout.CENTER);
            dpanel.add(p);
            m_panel.add(dpanel);
        }
    }
    if (m_nodes.isEmpty()) {
        m_panel.add(new JLabel("No valid Quickform configurations."));
    }
}
Also used : JPanel(javax.swing.JPanel) FlowLayout(java.awt.FlowLayout) BoxLayout(javax.swing.BoxLayout) ArrayList(java.util.ArrayList) DialogNode(org.knime.core.node.dialog.DialogNode) MetaNodeDialogNode(org.knime.core.node.dialog.MetaNodeDialogNode) BorderLayout(java.awt.BorderLayout) Pair(org.knime.core.util.Pair) JLabel(javax.swing.JLabel) QuickFormInputNode(org.knime.core.quickform.in.QuickFormInputNode) DialogNodeRepresentation(org.knime.core.node.dialog.DialogNodeRepresentation) InvalidSettingsException(org.knime.core.node.InvalidSettingsException) NotConfigurableException(org.knime.core.node.NotConfigurableException) MetaNodeDialogNode(org.knime.core.node.dialog.MetaNodeDialogNode) DialogNodeValue(org.knime.core.node.dialog.DialogNodeValue) LinkedHashMap(java.util.LinkedHashMap) Map(java.util.Map) DialogNodePanel(org.knime.core.node.dialog.DialogNodePanel)

Example 5 with DialogNodeValue

use of org.knime.core.node.dialog.DialogNodeValue in project knime-core by knime.

the class SubNodeContainer method loadModelSettingsIntoDialogNodes.

/**
 * Applies the "modelSettings" (stored in the {@link SingleNodeContainerSettings} into the {@link DialogNode}
 * contained in this workflow.
 * @param modelSettings The new model settings.
 * @param performReset true when called via dialog, false when called during load.
 * @throws InvalidSettingsException ...
 */
@SuppressWarnings("rawtypes")
private void loadModelSettingsIntoDialogNodes(final NodeSettingsRO modelSettings, final boolean performReset) throws InvalidSettingsException {
    assert isLockedByCurrentThread();
    synchronized (m_nodeMutex) {
        // check state of contained WFM as state of this Subnode may already be "MARKED".
        if (m_wfm.getInternalState().isExecutionInProgress()) {
            throw new IllegalStateException("Cannot load settings as the Wrapped Metanode is currently executing");
        }
        Map<NodeID, DialogNode> nodes = m_wfm.findNodes(DialogNode.class, false);
        // contains all nodes that have new value (different to previous value, even if null now).
        Map<NodeID, DialogNodeValue> newDialogValueMap = new HashMap<>();
        // but do not set it yet in order to verify/load all settings before applying them
        for (Map.Entry<NodeID, DialogNode> entry : nodes.entrySet()) {
            final NodeID id = entry.getKey();
            final DialogNode node = entry.getValue();
            final String parameterName = getDialogNodeParameterName(node, id);
            // the old/previously set value in the node
            final DialogNodeValue oldDialogValue = node.getDialogValue();
            final NodeSettings oldDialogValueSettings;
            if (oldDialogValue != null) {
                oldDialogValueSettings = new NodeSettings(parameterName);
                oldDialogValue.saveToNodeSettings(oldDialogValueSettings);
            } else {
                oldDialogValueSettings = null;
            }
            final NodeSettingsRO newDialogValueSettings = modelSettings.containsKey(parameterName) ? modelSettings.getNodeSettings(parameterName) : null;
            // #equals on DialogNodeValue might not be implemented.
            if (ObjectUtils.notEqual(newDialogValueSettings, oldDialogValueSettings)) {
                final DialogNodeValue newDialogValue;
                if (newDialogValueSettings != null) {
                    newDialogValue = node.createEmptyDialogValue();
                    try {
                        newDialogValue.loadFromNodeSettings(newDialogValueSettings);
                    } catch (InvalidSettingsException e) {
                        throw new InvalidSettingsException(String.format("Cannot load dialog value for node \"%s\": %s", m_wfm.getNodeContainer(id).getNameWithID(), e.getMessage()), e);
                    }
                } else {
                    newDialogValue = null;
                }
                newDialogValueMap.put(id, newDialogValue);
            }
        }
        // apply all new dialog values and reset/configure those nodes with modified config.
        for (Map.Entry<NodeID, DialogNodeValue> modifiedNodesEntry : newDialogValueMap.entrySet()) {
            final DialogNode node = nodes.get(modifiedNodesEntry.getKey());
            node.setDialogValue(modifiedNodesEntry.getValue());
            if (performReset) {
                m_wfm.resetAndConfigureNode(modifiedNodesEntry.getKey());
            }
        }
    }
}
Also used : HashMap(java.util.HashMap) DialogNode(org.knime.core.node.dialog.DialogNode) MetaNodeDialogNode(org.knime.core.node.dialog.MetaNodeDialogNode) NodeSettings(org.knime.core.node.NodeSettings) InvalidSettingsException(org.knime.core.node.InvalidSettingsException) NodeSettingsRO(org.knime.core.node.NodeSettingsRO) DialogNodeValue(org.knime.core.node.dialog.DialogNodeValue) Map(java.util.Map) HashMap(java.util.HashMap)

Aggregations

Map (java.util.Map)6 DialogNode (org.knime.core.node.dialog.DialogNode)6 DialogNodeValue (org.knime.core.node.dialog.DialogNodeValue)6 MetaNodeDialogNode (org.knime.core.node.dialog.MetaNodeDialogNode)6 InvalidSettingsException (org.knime.core.node.InvalidSettingsException)4 HashMap (java.util.HashMap)3 LinkedHashMap (java.util.LinkedHashMap)3 NodeSettingsRO (org.knime.core.node.NodeSettingsRO)3 DialogNodePanel (org.knime.core.node.dialog.DialogNodePanel)3 QuickFormInputNode (org.knime.core.quickform.in.QuickFormInputNode)3 NodeSettingsWO (org.knime.core.node.NodeSettingsWO)2 AbstractQuickFormConfiguration (org.knime.core.quickform.AbstractQuickFormConfiguration)2 AbstractQuickFormValueInConfiguration (org.knime.core.quickform.AbstractQuickFormValueInConfiguration)2 QuickFormConfigurationPanel (org.knime.core.quickform.QuickFormConfigurationPanel)2 BorderLayout (java.awt.BorderLayout)1 FlowLayout (java.awt.FlowLayout)1 ArrayList (java.util.ArrayList)1 BoxLayout (javax.swing.BoxLayout)1 JLabel (javax.swing.JLabel)1 JPanel (javax.swing.JPanel)1