class RowMetaAndData implements Cloneable {

  public boolean isEmptyValue( String valueName ) throws HopValueException {
    int idx = rowMeta.indexOfValue( valueName );
    if ( idx < 0 ) {
      throw new HopValueException( "Unknown column '" + valueName + "'" );
    }

    IValueMeta metaType = rowMeta.getValueMeta( idx );
    // find by source value type
    switch ( metaType.getType() ) {
      case IValueMeta.TYPE_STRING:
        return rowMeta.getString( data, idx ) == null;
      case IValueMeta.TYPE_BOOLEAN:
        return rowMeta.getBoolean( data, idx ) == null;
      case IValueMeta.TYPE_INTEGER:
        return rowMeta.getInteger( data, idx ) == null;
      case IValueMeta.TYPE_NUMBER:
        return rowMeta.getNumber( data, idx ) == null;
      case IValueMeta.TYPE_BIGNUMBER:
        return rowMeta.getBigNumber( data, idx ) == null;
      case IValueMeta.TYPE_BINARY:
        return rowMeta.getBinary( data, idx ) == null;
      case IValueMeta.TYPE_DATE:
      case IValueMeta.TYPE_TIMESTAMP:
        return rowMeta.getDate( data, idx ) == null;
      case IValueMeta.TYPE_INET:
        return rowMeta.getString( data, idx ) == null;
    }
    throw new HopValueException( "Unknown source type: " + metaType.getTypeDesc() );
  }

  public  RowMetaAndData();
  public  RowMetaAndData( IRowMeta rowMeta, Object... data );

}