org.pentaho.di.core.row
Class RowMeta

java.lang.Object
  extended by org.pentaho.di.core.row.RowMeta
All Implemented Interfaces:
Cloneable, RowMetaInterface

public class RowMeta
extends Object
implements RowMetaInterface


Field Summary
static String XML_DATA_TAG
           
static String XML_META_TAG
           
 
Constructor Summary
RowMeta()
           
RowMeta(DataInputStream inputStream)
           
RowMeta(Node node)
          Create a new row metadata object from XML
 
Method Summary
 void addRowMeta(RowMetaInterface rowMeta)
          Add a number of fields from another row (append to the end)
 void addValueMeta(int index, ValueMetaInterface meta)
          Add a metadata value on a certain location in the row.
 void addValueMeta(ValueMetaInterface meta)
          Add a metadata value.
 void clear()
          Clear the row metadata
 RowMeta clone()
           
 Object[] cloneRow(Object[] objects)
           
 Object[] cloneRow(Object[] objects, Object[] newObjects)
           
 int compare(Object[] rowData1, Object[] rowData2)
          Compare 2 rows with each other using all values in the rows and also considering the specified ascending clauses of the value metadata.
 int compare(Object[] rowData1, Object[] rowData2, int[] fieldnrs)
          Compare 2 rows with each other using certain values in the rows and also considering the specified ascending clauses of the value metadata.
 int compare(Object[] rowData1, Object[] rowData2, int[] fieldnrs1, int[] fieldnrs2)
          Compare 2 rows with each other using certain values in the rows and also considering the specified ascending clauses of the value metadata.
 int compare(Object[] rowData1, RowMetaInterface rowMeta2, Object[] rowData2, int[] fieldnrs1, int[] fieldnrs2)
          Compare 2 rows with each other using certain values in the rows and also considering the specified ascending clauses of the value metadata.
 int convertedValuesHashCode(Object[] rowData)
          Calculates a hashcode of the converted value of all objects in the supplied row.
static Row createOriginalRow(RowMetaInterface rowMeta, Object[] rowData)
           
 boolean equals(Object[] rowData1, Object[] rowData2, int[] fieldnrs)
          Compare 2 rows with each other for equality using certain values in the rows and also considering the case sensitivity flag.
 boolean exists(ValueMetaInterface meta)
          Check if a value is already present in this row with the same name
static byte[] extractData(RowMetaInterface metadata, Object[] row)
          Serialize a row of data to byte[]
 BigDecimal getBigNumber(Object[] dataRow, int index)
          Get a BigNumber value from a row of data.
 byte[] getBinary(Object[] dataRow, int index)
          Get a Binary value from a row of data.
 Boolean getBoolean(Object[] dataRow, int index)
          Get a Boolean value from a row of data.
 String getDataXML(Object[] rowData)
           
 Date getDate(Object[] dataRow, int index)
          Get a Date value from a row of data.
 Date getDate(Object[] dataRow, String valueName, Date defaultValue)
           
 String[] getFieldNames()
          Get an array of the names of all the Values in the Row.
 String[] getFieldNamesAndTypes(int maxlen)
          Get an array of strings showing the name of the values in the row padded to a maximum length, followed by the types of the values.
 Long getInteger(Object[] dataRow, int index)
          Get an Integer value from a row of data.
 Long getInteger(Object[] dataRow, String valueName, Long defaultValue)
           
 String getMetaXML()
           
 Double getNumber(Object[] dataRow, int index)
          Get a Number value from a row of data.
 Object[] getRow(Node node)
          Convert an XML node into binary data using the row metadata supplied.
static Object[] getRow(RowMetaInterface metadata, byte[] data)
          Create a row of data bases on a serialized format (byte[])
 String getString(Object[] row)
          Get the string representation of the data in a row of data
 String getString(Object[] dataRow, int index)
          Get a String value from a row of data.
 String getString(Object[] dataRow, String valueName, String defaultValue)
           
 ValueMetaInterface getValueMeta(int index)
          Get the value metadata on the specified index.
 List<ValueMetaInterface> getValueMetaList()
           
 int hashCode(Object[] rowData)
          Calculates a simple hashCode of all the native data objects in the supplied row.
 int indexOfValue(String valueName)
          Searches the index of a value meta with a given name
 boolean isEmpty()
           
 boolean isNull(Object[] dataRow, int index)
          Determines whether a value in a row is null.
 void mergeRowMeta(RowMetaInterface r)
          Merge the values of row r to this Row.
 int oldXORHashCode(Object[] rowData)
          Deprecated.  
 Object[] readData(DataInputStream inputStream)
          De-serialize a row of data (no metadata is read) from an input stream
 void removeValueMeta(int index)
          Remove a value metadata object on a certain index in the row
 void removeValueMeta(String valueName)
          Remove a value with a certain name from the row metadata
 ValueMetaInterface searchValueMeta(String valueName)
          Searches for a value with a certain name in the value meta list
 void setValueMeta(int index, ValueMetaInterface valueMeta)
          Replaces a value meta entry in the row metadata with another one
 void setValueMetaList(List<ValueMetaInterface> valueMetaList)
           
 int size()
           
 String toString()
           
 String toStringMeta()
           
 void writeData(DataOutputStream outputStream, Object[] data)
          Write ONLY the specified data to the outputStream
 void writeMeta(DataOutputStream outputStream)
          Write ONLY the specified metadata to the outputStream
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

XML_META_TAG

public static final String XML_META_TAG
See Also:
Constant Field Values

XML_DATA_TAG

public static final String XML_DATA_TAG
See Also:
Constant Field Values
Constructor Detail

RowMeta

public RowMeta()

RowMeta

public RowMeta(DataInputStream inputStream)
        throws KettleFileException,
               KettleEOFException,
               SocketTimeoutException
Throws:
KettleFileException
KettleEOFException
SocketTimeoutException

RowMeta

public RowMeta(Node node)
        throws KettleException
Create a new row metadata object from XML

Parameters:
node - the XML node to deserialize from
Throws:
IOException - Thrown in case there is an (Base64/GZip) decoding problem
KettleException
Method Detail

clone

public RowMeta clone()
Specified by:
clone in interface RowMetaInterface
Overrides:
clone in class Object
Returns:
a copy of this RowMetaInterface object

toString

public String toString()
Overrides:
toString in class Object

getValueMetaList

public List<ValueMetaInterface> getValueMetaList()
Specified by:
getValueMetaList in interface RowMetaInterface
Returns:
the list of value metadata

setValueMetaList

public void setValueMetaList(List<ValueMetaInterface> valueMetaList)
Specified by:
setValueMetaList in interface RowMetaInterface
Parameters:
valueMetaList - the list of valueMeta to set

size

public int size()
Specified by:
size in interface RowMetaInterface
Returns:
the number of values in the row

isEmpty

public boolean isEmpty()
Specified by:
isEmpty in interface RowMetaInterface
Returns:
true if there are no elements in the row metadata

exists

public boolean exists(ValueMetaInterface meta)
Description copied from interface: RowMetaInterface
Check if a value is already present in this row with the same name

Specified by:
exists in interface RowMetaInterface
Parameters:
meta - the value to check for existence
Returns:
true if a value with the same name already exists in the row

addValueMeta

public void addValueMeta(ValueMetaInterface meta)
Add a metadata value. If a value with the same name already exists, it gets renamed.

Specified by:
addValueMeta in interface RowMetaInterface
Parameters:
meta - The metadata value to add

addValueMeta

public void addValueMeta(int index,
                         ValueMetaInterface meta)
Add a metadata value on a certain location in the row. If a value with the same name already exists, it gets renamed. Remember to change the data row according to this.

Specified by:
addValueMeta in interface RowMetaInterface
Parameters:
index - The index where the metadata value needs to be put in the row
meta - The metadata value to add to the row

getValueMeta

public ValueMetaInterface getValueMeta(int index)
Get the value metadata on the specified index.

Specified by:
getValueMeta in interface RowMetaInterface
Parameters:
index - The index to get the value metadata from
Returns:
The value metadata specified by the index.

setValueMeta

public void setValueMeta(int index,
                         ValueMetaInterface valueMeta)
Replaces a value meta entry in the row metadata with another one

Specified by:
setValueMeta in interface RowMetaInterface
Parameters:
index - The index in the row to replace at
valueMeta - the metadata to replace with

getString

public String getString(Object[] dataRow,
                        int index)
                 throws KettleValueException
Get a String value from a row of data. Convert data if this needed.

Specified by:
getString in interface RowMetaInterface
Parameters:
rowRow - the row of data
index - the index
Returns:
The string found on that position in the row
Throws:
KettleValueException - in case there was a problem converting the data.

getInteger

public Long getInteger(Object[] dataRow,
                       int index)
                throws KettleValueException
Get an Integer value from a row of data. Convert data if this needed.

Specified by:
getInteger in interface RowMetaInterface
Parameters:
rowRow - the row of data
index - the index
Returns:
The integer found on that position in the row
Throws:
KettleValueException - in case there was a problem converting the data.

getNumber

public Double getNumber(Object[] dataRow,
                        int index)
                 throws KettleValueException
Get a Number value from a row of data. Convert data if this needed.

Specified by:
getNumber in interface RowMetaInterface
Parameters:
rowRow - the row of data
index - the index
Returns:
The number found on that position in the row
Throws:
KettleValueException - in case there was a problem converting the data.

getDate

public Date getDate(Object[] dataRow,
                    int index)
             throws KettleValueException
Get a Date value from a row of data. Convert data if this needed.

Specified by:
getDate in interface RowMetaInterface
Parameters:
rowRow - the row of data
index - the index
Returns:
The date found on that position in the row
Throws:
KettleValueException - in case there was a problem converting the data.

getBigNumber

public BigDecimal getBigNumber(Object[] dataRow,
                               int index)
                        throws KettleValueException
Get a BigNumber value from a row of data. Convert data if this needed.

Specified by:
getBigNumber in interface RowMetaInterface
Parameters:
rowRow - the row of data
index - the index
Returns:
The bignumber found on that position in the row
Throws:
KettleValueException - in case there was a problem converting the data.

getBoolean

public Boolean getBoolean(Object[] dataRow,
                          int index)
                   throws KettleValueException
Get a Boolean value from a row of data. Convert data if this needed.

Specified by:
getBoolean in interface RowMetaInterface
Parameters:
rowRow - the row of data
index - the index
Returns:
The boolean found on that position in the row
Throws:
KettleValueException - in case there was a problem converting the data.

getBinary

public byte[] getBinary(Object[] dataRow,
                        int index)
                 throws KettleValueException
Get a Binary value from a row of data. Convert data if this needed.

Specified by:
getBinary in interface RowMetaInterface
Parameters:
rowRow - the row of data
index - the index
Returns:
The binary found on that position in the row
Throws:
KettleValueException - in case there was a problem converting the data.

isNull

public boolean isNull(Object[] dataRow,
                      int index)
               throws KettleValueException
Determines whether a value in a row is null. A value is null when the object is null or when it's an empty String

Specified by:
isNull in interface RowMetaInterface
Parameters:
dataRow - The row of data
index - the index to reference
Returns:
true if the value on the index is null.
Throws:
KettleValueException - in case there is a conversion error (only thrown in case of lazy conversion)

cloneRow

public Object[] cloneRow(Object[] objects)
                  throws KettleValueException
Specified by:
cloneRow in interface RowMetaInterface
Returns:
a cloned Object[] object.
Throws:
KettleValueException - in case something is not quite right with the expected data

cloneRow

public Object[] cloneRow(Object[] objects,
                         Object[] newObjects)
                  throws KettleValueException
Specified by:
cloneRow in interface RowMetaInterface
Returns:
a cloned Object[] object.
Throws:
KettleValueException - in case something is not quite right with the expected data

getString

public String getString(Object[] dataRow,
                        String valueName,
                        String defaultValue)
                 throws KettleValueException
Specified by:
getString in interface RowMetaInterface
Throws:
KettleValueException

getInteger

public Long getInteger(Object[] dataRow,
                       String valueName,
                       Long defaultValue)
                throws KettleValueException
Specified by:
getInteger in interface RowMetaInterface
Throws:
KettleValueException

getDate

public Date getDate(Object[] dataRow,
                    String valueName,
                    Date defaultValue)
             throws KettleValueException
Specified by:
getDate in interface RowMetaInterface
Throws:
KettleValueException

indexOfValue

public int indexOfValue(String valueName)
Searches the index of a value meta with a given name

Specified by:
indexOfValue in interface RowMetaInterface
Parameters:
valueName - the name of the value metadata to look for
Returns:
the index or -1 in case we didn't find the value

searchValueMeta

public ValueMetaInterface searchValueMeta(String valueName)
Searches for a value with a certain name in the value meta list

Specified by:
searchValueMeta in interface RowMetaInterface
Parameters:
valueName - The value name to search for
Returns:
The value metadata or null if nothing was found

addRowMeta

public void addRowMeta(RowMetaInterface rowMeta)
Description copied from interface: RowMetaInterface
Add a number of fields from another row (append to the end)

Specified by:
addRowMeta in interface RowMetaInterface
Parameters:
rowMeta - The row of metadata values to add

mergeRowMeta

public void mergeRowMeta(RowMetaInterface r)
Merge the values of row r to this Row. The values that are not yet in the row are added unchanged. The values that are in the row are renamed to name_2, name_3, etc.

Specified by:
mergeRowMeta in interface RowMetaInterface
Parameters:
r - The row to be merged with this row

getFieldNames

public String[] getFieldNames()
Get an array of the names of all the Values in the Row.

Specified by:
getFieldNames in interface RowMetaInterface
Returns:
an array of Strings: the names of all the Values in the Row.

writeData

public void writeData(DataOutputStream outputStream,
                      Object[] data)
               throws KettleFileException
Write ONLY the specified data to the outputStream

Specified by:
writeData in interface RowMetaInterface
Parameters:
outputStream - the outputstream to write to
data - the data to write after the metadata
Throws:
KettleFileException - in case things go awry

writeMeta

public void writeMeta(DataOutputStream outputStream)
               throws KettleFileException
Write ONLY the specified metadata to the outputStream

Specified by:
writeMeta in interface RowMetaInterface
Parameters:
outputStream - the outputstream to write to
Throws:
KettleFileException - in case things go awry

readData

public Object[] readData(DataInputStream inputStream)
                  throws KettleFileException,
                         KettleEOFException,
                         SocketTimeoutException
Description copied from interface: RowMetaInterface
De-serialize a row of data (no metadata is read) from an input stream

Specified by:
readData in interface RowMetaInterface
Parameters:
inputStream - the inputstream to read from
Returns:
a new row of data
Throws:
KettleFileException - in case a I/O error occurs
SocketTimeoutException - In case there is a timeout during reading.
KettleEOFException

clear

public void clear()
Description copied from interface: RowMetaInterface
Clear the row metadata

Specified by:
clear in interface RowMetaInterface

removeValueMeta

public void removeValueMeta(String valueName)
                     throws KettleValueException
Description copied from interface: RowMetaInterface
Remove a value with a certain name from the row metadata

Specified by:
removeValueMeta in interface RowMetaInterface
Parameters:
valueName - the name of the value metadata to remove
Throws:
KettleValueException - in case the value couldn't be found in the row metadata

removeValueMeta

public void removeValueMeta(int index)
Description copied from interface: RowMetaInterface
Remove a value metadata object on a certain index in the row

Specified by:
removeValueMeta in interface RowMetaInterface
Parameters:
index - the index to remove the value metadata from

toStringMeta

public String toStringMeta()
Specified by:
toStringMeta in interface RowMetaInterface
Returns:
a string with a description of all the metadata values of the complete row of metadata

getString

public String getString(Object[] row)
                 throws KettleValueException
Get the string representation of the data in a row of data

Specified by:
getString in interface RowMetaInterface
Parameters:
row - the row of data to convert to string
Returns:
the row of data in string form
Throws:
KettleValueException - in case of a conversion error

getFieldNamesAndTypes

public String[] getFieldNamesAndTypes(int maxlen)
Get an array of strings showing the name of the values in the row padded to a maximum length, followed by the types of the values.

Specified by:
getFieldNamesAndTypes in interface RowMetaInterface
Parameters:
maxlen - The length to which the name will be padded.
Returns:
an array of strings: the names and the types of the fieldnames in the row.

compare

public int compare(Object[] rowData1,
                   Object[] rowData2,
                   int[] fieldnrs)
            throws KettleValueException
Compare 2 rows with each other using certain values in the rows and also considering the specified ascending clauses of the value metadata.

Specified by:
compare in interface RowMetaInterface
Parameters:
rowData1 - The first row of data
rowData2 - The second row of data
fieldnrs - the fields to compare on (in that order)
Returns:
0 if the rows are considered equal, -1 is data1 is smaller, 1 if data2 is smaller.
Throws:
KettleValueException

equals

public boolean equals(Object[] rowData1,
                      Object[] rowData2,
                      int[] fieldnrs)
               throws KettleValueException
Compare 2 rows with each other for equality using certain values in the rows and also considering the case sensitivity flag.

Specified by:
equals in interface RowMetaInterface
Parameters:
rowData1 - The first row of data
rowData2 - The second row of data
fieldnrs - the fields to compare on (in that order)
Returns:
true if the rows are considered equal, false if they are not.
Throws:
KettleValueException

compare

public int compare(Object[] rowData1,
                   Object[] rowData2,
                   int[] fieldnrs1,
                   int[] fieldnrs2)
            throws KettleValueException
Compare 2 rows with each other using certain values in the rows and also considering the specified ascending clauses of the value metadata.

Specified by:
compare in interface RowMetaInterface
Parameters:
rowData1 - The first row of data
rowData2 - The second row of data
fieldnrs1 - The indexes of the values to compare in the first row
fieldnrs2 - The indexes of the values to compare with in the second row
Returns:
0 if the rows are considered equal, -1 is data1 is smaller, 1 if data2 is smaller.
Throws:
KettleValueException

compare

public int compare(Object[] rowData1,
                   RowMetaInterface rowMeta2,
                   Object[] rowData2,
                   int[] fieldnrs1,
                   int[] fieldnrs2)
            throws KettleValueException
Compare 2 rows with each other using certain values in the rows and also considering the specified ascending clauses of the value metadata.

Specified by:
compare in interface RowMetaInterface
Parameters:
rowData1 - The first row of data
rowMeta2 - the metadata of the second row of data
rowData2 - The second row of data
fieldnrs1 - The indexes of the values to compare in the first row
fieldnrs2 - The indexes of the values to compare with in the second row
Returns:
0 if the rows are considered equal, -1 is data1 is smaller, 1 if data2 is smaller.
Throws:
KettleValueException

compare

public int compare(Object[] rowData1,
                   Object[] rowData2)
            throws KettleValueException
Compare 2 rows with each other using all values in the rows and also considering the specified ascending clauses of the value metadata.

Specified by:
compare in interface RowMetaInterface
Parameters:
rowData1 - The first row of data
rowData2 - The second row of data
Returns:
0 if the rows are considered equal, -1 is data1 is smaller, 1 if data2 is smaller.
Throws:
KettleValueException

oldXORHashCode

public int oldXORHashCode(Object[] rowData)
                   throws KettleValueException
Deprecated. 

Calculate a hashCode of the content (not the index) of the data specified NOTE: This method uses a simple XOR of the individual hashCodes which can result in a lot of collisions for similar types of data (e.g. [A,B] == [B,A] and is not suitable for normal use. It is kept to provide backward compatibility with CombinationLookup.lookupValues()

Specified by:
oldXORHashCode in interface RowMetaInterface
Parameters:
rowData - The data to calculate a hashCode with
Returns:
the calculated hashCode
Throws:
KettleValueException - in case there is a data conversion error

hashCode

public int hashCode(Object[] rowData)
             throws KettleValueException
Calculates a simple hashCode of all the native data objects in the supplied row. This method will return a better distribution of values for rows of numbers or rows with the same values in different positions. NOTE: This method performs against the native values, not the values returned by ValueMeta. This means that if you have two rows with different primitive values ['2008-01-01:12:30'] and ['2008-01-01:00:00'] that use a format object to change the value (as Date yyyy-MM-dd), the hashCodes will be different resulting in the two rows not being considered equal via the hashCode even though compare() or equals() might consider them to be.

Specified by:
hashCode in interface RowMetaInterface
Parameters:
rowData - The data to calculate a hashCode with
Returns:
the calculated hashCode
Throws:
KettleValueException - in case there is a data conversion error

convertedValuesHashCode

public int convertedValuesHashCode(Object[] rowData)
                            throws KettleValueException
Calculates a hashcode of the converted value of all objects in the supplied row. This method returns distinct values for nulls of different data types and will return the same hashCode for different native values that have a ValueMeta converting them into the same value (e.g. ['2008-01-01:12:30'] and ['2008-01-01:00:00'] as Date yyyy-MM-dd)

Specified by:
convertedValuesHashCode in interface RowMetaInterface
Parameters:
rowData - The data to calculate a hashCode with
Returns:
the calculated hashCode
Throws:
KettleValueException - in case there is a data conversion error

extractData

public static final byte[] extractData(RowMetaInterface metadata,
                                       Object[] row)
Serialize a row of data to byte[]

Parameters:
metadata - the metadata to use
row - the row of data
Returns:
a serialized form of the data as a byte array

getRow

public static final Object[] getRow(RowMetaInterface metadata,
                                    byte[] data)
Create a row of data bases on a serialized format (byte[])

Parameters:
data - the serialized data
metadata - the metadata to use
Returns:
a new row of data

createOriginalRow

public static Row createOriginalRow(RowMetaInterface rowMeta,
                                    Object[] rowData)
                             throws KettleValueException
Throws:
KettleValueException

getMetaXML

public String getMetaXML()
                  throws IOException
Specified by:
getMetaXML in interface RowMetaInterface
Returns:
an XML representation of the row metadata
Throws:
IOException - Thrown in case there is an (Base64/GZip) encoding problem

getDataXML

public String getDataXML(Object[] rowData)
                  throws IOException
Specified by:
getDataXML in interface RowMetaInterface
Parameters:
rowData - the row of data to serialize as XML
Returns:
an XML representation of the row data
Throws:
IOException - Thrown in case there is an (Base64/GZip) encoding problem

getRow

public Object[] getRow(Node node)
                throws KettleException
Convert an XML node into binary data using the row metadata supplied.

Specified by:
getRow in interface RowMetaInterface
Parameters:
node - The data row node
Returns:
a row of data, converted from XML
Throws:
IOException - Thrown in case there is an (Base64/GZip) decoding problem
KettleException - Thrown in case there is an (Base64/GZip) decoding problem