org.knime.base.node.parallel.builder
Class ThreadedTableBuilderNodeModel

java.lang.Object
  extended by org.knime.core.node.NodeModel
      extended by org.knime.base.node.parallel.builder.ThreadedTableBuilderNodeModel

public abstract class ThreadedTableBuilderNodeModel
extends NodeModel

This model is an extension of the NodeModel that allows you to easily process data in parallel. In contrast to the ThreadedColAppenderNodeModel, this model is suitable for creating completely new output tables. All you have to do is create the output table specs in the prepareExecute(DataTable[]) method and then implement the processRow(DataRow, BufferedDataTable[], RowAppender[]) method to produce one or more (or even no) output row(s) for each input row.

Author:
Thorsten Meinl, University of Konstanz

Constructor Summary
ThreadedTableBuilderNodeModel(int nrDataIns, int nrDataOuts)
          Creates a new AbstractParallelNodeModel.
ThreadedTableBuilderNodeModel(int nrDataIns, int nrDataOuts, ThreadPool workers)
          Creates a new AbstractParallelNodeModel.
 
Method Summary
protected  BufferedDataTable[] execute(BufferedDataTable[] data, ExecutionContext exec)
          This function is invoked by the Node#executeNode() method of the node (through the #executeModel(BufferedDataTable[],ExecutionMonitor) method)only after all predecessor nodes have been successfully executed and all data is therefore available at the input ports.
protected abstract  DataTableSpec[] prepareExecute(DataTable[] data)
          This method is called before the first row is processed.
protected abstract  void processRow(DataRow inRow, BufferedDataTable[] additionalData, RowAppender[] outputTables)
          This method is called once for each row in the first input table.
 
Methods inherited from class org.knime.core.node.NodeModel
addWarningListener, configure, configure, continueLoop, execute, executeModel, getInHiLiteHandler, getLoopEndNode, getLoopStartNode, getNrInPorts, getNrOutPorts, getOutHiLiteHandler, getWarningMessage, loadInternals, loadValidatedSettingsFrom, notifyViews, notifyWarningListeners, peekFlowVariableDouble, peekFlowVariableInt, peekFlowVariableString, peekScopeVariableDouble, peekScopeVariableInt, peekScopeVariableString, pushFlowVariableDouble, pushFlowVariableInt, pushFlowVariableString, pushScopeVariableDouble, pushScopeVariableInt, pushScopeVariableString, removeWarningListener, reset, saveInternals, saveSettingsTo, setInHiLiteHandler, setWarningMessage, stateChanged, validateSettings
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ThreadedTableBuilderNodeModel

public ThreadedTableBuilderNodeModel(int nrDataIns,
                                     int nrDataOuts)
Creates a new AbstractParallelNodeModel. The model

Parameters:
nrDataIns - The number of DataTable elements expected as inputs.
nrDataOuts - The number of DataTable objects expected at the output.

ThreadedTableBuilderNodeModel

public ThreadedTableBuilderNodeModel(int nrDataIns,
                                     int nrDataOuts,
                                     ThreadPool workers)
Creates a new AbstractParallelNodeModel.

Parameters:
nrDataIns - The number of DataTable elements expected as inputs.
nrDataOuts - The number of DataTable objects expected at the output.
workers - a thread pool where threads for processing the chunks are taken from
Method Detail

execute

protected final BufferedDataTable[] execute(BufferedDataTable[] data,
                                            ExecutionContext exec)
                                     throws Exception
This function is invoked by the Node#executeNode() method of the node (through the #executeModel(BufferedDataTable[],ExecutionMonitor) method)only after all predecessor nodes have been successfully executed and all data is therefore available at the input ports. Implement this function with your task in the derived model.

The input data is available in the given array argument inData and is ensured to be neither null nor contain null elements.

In order to create output data, you need to create objects of class BufferedDataTable. Use the execution context argument to create BufferedDataTable.

Overrides:
execute in class NodeModel
Parameters:
data - An array holding DataTable elements, one for each input.
exec - The execution monitor for this execute method. It provides us with means to create new BufferedDataTable. Additionally, it should be asked frequently if the execution should be interrupted and throws an exception then. This exception might me caught, and then after closing all data streams, been thrown again. Also, if you can tell the progress of your task, just set it in this monitor.
Returns:
An array of non- null DataTable elements with the size of the number of outputs. The result of this execution.
Throws:
Exception - If you must fail the execution. Try to provide a meaningful error message in the exception as it will be displayed to the user.Please be advised to check frequently the canceled status by invoking ExecutionMonitor#checkCanceled which will throw an CanceledExcecutionException and abort the execution.

prepareExecute

protected abstract DataTableSpec[] prepareExecute(DataTable[] data)
                                           throws Exception
This method is called before the first row is processed. The method must return the data table specification(s) for the result table(s) because the RowAppender passed to processRow(DataRow, BufferedDataTable[], RowAppender[]) must be constructed accordingly.

Parameters:
data - the input data tables
Returns:
the table spec(s) of the result table(s) in the right order. The result and none of the table specs must be null!
Throws:
Exception - if something goes wrong during preparation

processRow

protected abstract void processRow(DataRow inRow,
                                   BufferedDataTable[] additionalData,
                                   RowAppender[] outputTables)
                            throws Exception
This method is called once for each row in the first input table. The remaining tables are passed completely in the second argument. The output rows must then be written into the row appender(s). There is a row appender for each output table. Please note that this method is called by many threads at the same time, so do NOT synchronize it and make sure that write access to global data does not mess up things.

Parameters:
inRow - an input row
additionalData - the complete tables of additional data
outputTables - data containers for the output tables where the computed rows must be added
Throws:
Exception - if an exception occurs


Copyright, 2003 - 2010. All rights reserved.
University of Konstanz, Germany.
Chair for Bioinformatics and Information Mining, Prof. Dr. Michael R. Berthold.
You may not modify, publish, transmit, transfer or sell, reproduce, create derivative works from, distribute, perform, display, or in any way exploit any of the content, in whole or in part, except as otherwise expressly permitted in writing by the copyright owner or as specified in the license file distributed with this product.