SiLeBAT/FSK-Lab

View on GitHub
de.bund.bfr.knime.internal.nodes/src/de/bund/bfr/knime/internal/rhome/RHomeNodeFactory.java

Summary

Maintainability
A
2 hrs
Test Coverage
package de.bund.bfr.knime.internal.rhome;

import java.nio.file.Path;

import org.knime.core.data.DataColumnSpec;
import org.knime.core.data.DataColumnSpecCreator;
import org.knime.core.data.DataTableSpec;
import org.knime.core.data.DataTableSpecCreator;
import org.knime.core.data.def.DefaultRow;
import org.knime.core.data.def.StringCell;
import org.knime.core.node.BufferedDataContainer;
import org.knime.core.node.BufferedDataTable;
import org.knime.core.node.InvalidSettingsException;
import org.knime.core.node.NodeDialogPane;
import org.knime.core.node.NodeFactory;
import org.knime.core.node.NodeModel;
import org.knime.core.node.NodeView;
import org.knime.core.node.StatelessModel;
import org.knime.core.node.defaultnodesettings.DefaultNodeSettingsPane;
import org.knime.core.node.port.PortType;

import de.bund.bfr.knime.fsklab.preferences.PreferenceInitializer;
import de.bund.bfr.knime.fsklab.preferences.RPreferenceProvider;


public class RHomeNodeFactory extends NodeFactory<NodeModel> {

    @Override
    public NodeModel createNodeModel() {

        PortType[] inputTypes = {};
        PortType[] outputTypes = { BufferedDataTable.TYPE };

        return new StatelessModel(inputTypes, outputTypes) {
            protected DataTableSpec[] configure(DataTableSpec[] inSpecs) throws InvalidSettingsException {

                DataColumnSpec colSpec = new DataColumnSpecCreator("RHome", StringCell.TYPE).createSpec();
                DataTableSpecCreator specCreator = new DataTableSpecCreator().addColumns(colSpec);
                DataTableSpec tableSpec = specCreator.createSpec();

                return new DataTableSpec[] { tableSpec };
            };

            protected BufferedDataTable[] execute(BufferedDataTable[] inData, org.knime.core.node.ExecutionContext exec)
                    throws Exception {

                DataTableSpec tableSpec = configure(null)[0];
                BufferedDataContainer container = exec.createDataContainer(tableSpec);

                // Cells
                RPreferenceProvider provider = PreferenceInitializer.getR3Provider();

                // R home, bin and Rserve paths
                String rHome = "";
                String rBin = "";
                String rServeBin = "";

                if (provider != null) {
                    rHome = provider.getRHome();

                    Path rBinPath = provider.getRBinPath("R");
                    rBin = rBinPath != null ? rBinPath.toString() : "";

                    Path rServePath = provider.getRServeBinPath();
                    rServeBin = rServePath != null ? rServePath.toString() : "";
                }

                container.addRowToTable(new DefaultRow("R home", new StringCell(rHome)));
                container.addRowToTable(new DefaultRow("R bin", new StringCell(rBin)));
                container.addRowToTable(new DefaultRow("Rserve", new StringCell(rServeBin)));

                container.close();

                return new BufferedDataTable[] { container.getTable() };
            };
        };
    }

    @Override
    protected int getNrNodeViews() {
        return 0;
    }

    @Override
    protected boolean hasDialog() {
        return false;
    }

    @Override
    protected NodeDialogPane createNodeDialogPane() {
        return new DefaultNodeSettingsPane();
    }

    @Override
    public NodeView<NodeModel> createNodeView(int viewIndex, NodeModel nodeModel) {
        return null;
    }
}