org.pentaho.di.trans.steps.dimensionlookup
Class DimensionCache

java.lang.Object
  extended by org.pentaho.di.trans.steps.dimensionlookup.DimensionCache
All Implemented Interfaces:
Comparator<Object[]>

public class DimensionCache
extends Object
implements Comparator<Object[]>

This class will act as a special purpose dimension Cache. The idea here is to not only cache the last version of a dimension entry, but all versions. So basically, the entry key is the natural key as well as the from-to date range. The way to achieve that result is to keep a sorted list in memory. Because we want as few conversion errors as possible, we'll use the same row as we get from the database.

Author:
matt

Constructor Summary
DimensionCache(RowMetaInterface rowMeta, int[] keyIndexes, int fromDateIndex, int toDateIndex)
          Create a new dimension cache object
 
Method Summary
 void addRow(int index, Object[] row)
          Insert a row into the list on a certain index
 void addRow(Object[] row)
          Add a row to the back of the list
 int compare(Object[] o1, Object[] o2)
          Compare 2 rows of data using the natural keys and indexes specified.
 int getFromDateIndex()
           
 int[] getKeyIndexes()
           
 Object[] getRow(int index)
          Get a row from the cache on a certain index
 List<Object[]> getRowCache()
           
 RowMetaInterface getRowMeta()
           
 int getToDateIndex()
           
 int lookupRow(Object[] lookupRowData)
          Looks up a row in the (sorted) cache.
 void setFromDateIndex(int fromDateIndex)
           
 void setKeyIndexes(int[] keyIndexes)
           
 void setRowCache(List<Object[]> rowCache)
           
 void setRowMeta(RowMetaInterface rowMeta)
           
 void setToDateIndex(int toDateIndex)
           
 void sortRows()
           
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface java.util.Comparator
equals
 

Constructor Detail

DimensionCache

public DimensionCache(RowMetaInterface rowMeta,
                      int[] keyIndexes,
                      int fromDateIndex,
                      int toDateIndex)
Create a new dimension cache object

Parameters:
rowMeta - the description of the rows to store
keyIndexes - the indexes of the natural key (in that order)
fromDateIndex - the field index where the start of the date range can be found
toDateIndex - the field index where the end of the date range can be found
Method Detail

addRow

public void addRow(Object[] row)
Add a row to the back of the list

Parameters:
row - the row to add

getRow

public Object[] getRow(int index)
Get a row from the cache on a certain index

Parameters:
index - the index to look for
Returns:
the row on the specified index

addRow

public void addRow(int index,
                   Object[] row)
Insert a row into the list on a certain index

Parameters:
index - the index on which the row should be inserted
row - the row to add

lookupRow

public int lookupRow(Object[] lookupRowData)
              throws KettleException
Looks up a row in the (sorted) cache.

Parameters:
lookupRowData - The data of the lookup row. Make sure that on the index of the from date, you put the lookup date.
Throws:
a - KettleException in case there are conversion errors during the lookup of the row
KettleException

sortRows

public void sortRows()

compare

public int compare(Object[] o1,
                   Object[] o2)
Compare 2 rows of data using the natural keys and indexes specified.

Specified by:
compare in interface Comparator<Object[]>
Parameters:
o1 -
o2 -
Returns:

getRowMeta

public RowMetaInterface getRowMeta()
Returns:
the rowMeta

setRowMeta

public void setRowMeta(RowMetaInterface rowMeta)
Parameters:
rowMeta - the rowMeta to set

getRowCache

public List<Object[]> getRowCache()
Returns:
the rowCache

setRowCache

public void setRowCache(List<Object[]> rowCache)
Parameters:
rowCache - the rowCache to set

getKeyIndexes

public int[] getKeyIndexes()
Returns:
the keyIndexes

setKeyIndexes

public void setKeyIndexes(int[] keyIndexes)
Parameters:
keyIndexes - the keyIndexes to set

getFromDateIndex

public int getFromDateIndex()
Returns:
the fromDateIndex

setFromDateIndex

public void setFromDateIndex(int fromDateIndex)
Parameters:
fromDateIndex - the fromDateIndex to set

getToDateIndex

public int getToDateIndex()
Returns:
the toDateIndex

setToDateIndex

public void setToDateIndex(int toDateIndex)
Parameters:
toDateIndex - the toDateIndex to set