package de.mpicbg.knime.scripting.r.node.generic.snippet; import org.knime.core.node.ExecutionContext; import org.knime.core.node.InvalidSettingsException; import org.knime.core.node.port.PortObject; import org.knime.core.node.port.PortObjectSpec; import de.mpicbg.knime.scripting.core.ScriptingModelConfig; import de.mpicbg.knime.scripting.r.AbstractRScriptingNodeModel; import de.mpicbg.knime.scripting.r.RColumnSupport; import de.mpicbg.knime.scripting.r.port.RPortObject2; import de.mpicbg.knime.scripting.r.port.RPortObjectSpec2; /** * Model: A generic R node which modifies an R workspace * * @author Holger Brandl, Antje Janosch */ public class GenericRSnippetNodeModel2 extends AbstractRScriptingNodeModel { /** default R script */ public static final String GENERIC_SNIPPET_DFT = "# put your R code here\n" + "# availableObjects <- ls()"; public static final ScriptingModelConfig nodeModelConfig = new ScriptingModelConfig( createPorts(1, RPortObject2.TYPE, RPortObject2.class), // 1 generic input createPorts(1, RPortObject2.TYPE, RPortObject2.class) , // 1 generic output new RColumnSupport(), true, // script true, // open in R functionality false); // no chunks /** * constructor for 1 RPort input and 1 RPort output */ public GenericRSnippetNodeModel2(ScriptingModelConfig cfg) { super(cfg); } /** * constructor * @param inPortTypes * @param outPortTypes * @param useChunkSettings * @param useOpenIn */ public GenericRSnippetNodeModel2() { this(nodeModelConfig); } /** * {@inheritDoc} */ @Override // note: This is not the usual configure but a more generic one with PortObjectSpec instead of DataTableSpec protected PortObjectSpec[] configure(final PortObjectSpec[] inSpecs) throws InvalidSettingsException { super.configure(inSpecs); return hasOutput() ? new PortObjectSpec[]{RPortObjectSpec2.INSTANCE} : new PortObjectSpec[0]; } public String getDefaultScript() { return GENERIC_SNIPPET_DFT; } /** * {@inheritDoc} */ @Override protected PortObject[] executeImpl(PortObject[] inData, ExecutionContext exec) throws Exception { super.executeImpl(inData, exec); super.runScript(exec); PortObject[] outData = super.pullOutputFromR(exec); return outData; } }