biz.hammurapi.dataflow
Class AbstractMixer

java.lang.Object
  extended by biz.hammurapi.dataflow.AbstractMixer
All Implemented Interfaces:
DataSource
Direct Known Subclasses:
ChainingMixer, MountingMixer

public abstract class AbstractMixer
extends java.lang.Object
implements DataSource

Base class for mixers which join data.

Author:
Pavel

Nested Class Summary
protected static interface AbstractMixer.InputEntry
          Information about input presented to join().
static interface AbstractMixer.JoinHelper
          Joins inputs.
static interface AbstractMixer.JoinPredicate
          Decides whether given inputs shall be joined.
 
Field Summary
protected  DataSink sink
           
 
Constructor Summary
AbstractMixer()
           
 
Method Summary
protected  boolean addData(java.lang.String name, Data data)
          This method invokes join logic.
protected  Data chainInputs(AbstractMixer.InputEntry[] inputs)
          Creates output data by chaining non-null inputs.
protected  boolean controlsMultiplexing(java.lang.String name)
           
protected  Data createData(Data[] chain)
          Factory method for data.
protected  java.util.Collection createDataCollection(java.lang.String name)
          Creates collection to hold input data for joining.
protected  DataItemInfo[] getDataInfo(java.lang.String name)
           
 DataSink getInput(java.lang.String name)
           
protected abstract  void join(AbstractMixer.InputEntry[] inputs, java.lang.String activatorName, DataSink sink)
          Abstract mixer presents all permutations of newly arrived data from given input with previously arrived data from other inputs plus null values to include cases with inputs without data.
protected  Data mountInputs(AbstractMixer.InputEntry[] inputs, java.lang.String separator)
          Creates output data by mounting non-null inputs using their names plus separator as prefixes.
 void setSink(DataSink sink)
          Adds data sink to the source.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface biz.hammurapi.dataflow.DataSource
getName
 

Field Detail

sink

protected DataSink sink
Constructor Detail

AbstractMixer

public AbstractMixer()
Method Detail

setSink

public void setSink(DataSink sink)
Description copied from interface: DataSource
Adds data sink to the source. Data source multiplexes data it produces to all sinks unless one of sinks returns true from addData(), which terminates multiplexing.

Specified by:
setSink in interface DataSource

join

protected abstract void join(AbstractMixer.InputEntry[] inputs,
                             java.lang.String activatorName,
                             DataSink sink)
Abstract mixer presents all permutations of newly arrived data from given input with previously arrived data from other inputs plus null values to include cases with inputs without data.

Parameters:
inputs - Inputs for joining
activatorName - name of the input which activated this join (newly arrived data)
sink - DataSink to write results of joining to (if any).

getInput

public DataSink getInput(java.lang.String name)
Parameters:
name -
Returns:
Named input. Inputs are created on request.

controlsMultiplexing

protected boolean controlsMultiplexing(java.lang.String name)
Parameters:
name - Input name.
Returns:
multiplexing control flag for given named input.

getDataInfo

protected DataItemInfo[] getDataInfo(java.lang.String name)
Parameters:
name - Input name.
Returns:
Metadata for given named input.

createDataCollection

protected java.util.Collection createDataCollection(java.lang.String name)
Creates collection to hold input data for joining. This implementation creates ArrayList. Override to create other types of collections, e.g. Set or persistent collection for long-running, restartable data flows.

Parameters:
name - Input name.
Returns:
collection to hold input data for joining.

addData

protected boolean addData(java.lang.String name,
                          Data data)
This method invokes join logic.

Parameters:
name - Input name.
data - Input data.
Returns:
Always returns false - never consumes input. Override if needed.

createData

protected Data createData(Data[] chain)
Factory method for data. This implementation creates MapData. Override to create different type of Data, e.g. persistent data backed by relational database.

Parameters:
chain - Chain of data to delegate data item requests. Can be null.
Returns:

mountInputs

protected Data mountInputs(AbstractMixer.InputEntry[] inputs,
                           java.lang.String separator)
Creates output data by mounting non-null inputs using their names plus separator as prefixes.

Parameters:
inputs -
Returns:

chainInputs

protected Data chainInputs(AbstractMixer.InputEntry[] inputs)
Creates output data by chaining non-null inputs.

Parameters:
inputs -
Returns:


Copyright © 2005 Hammurapi Group. All Rights Reserved.