/*
* JBoss, Home of Professional Open Source.
*
* See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing.
*
* See the AUTHORS.txt file distributed with this work for a full listing of individual contributors.
*/
package org.teiid.designer.jdbc.data;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.sql.Date;
import java.sql.Timestamp;
import java.util.List;
import org.teiid.core.designer.util.CoreArgCheck;
import org.teiid.designer.jdbc.JdbcPlugin;
/**
* ResultsImpl
*
* @since 8.0
*/
public class ResultsImpl implements Results {
private final Response response;
private final List rowList;
private Object[] rowArray;
private Results next;
private Results previous;
/**
* Construct an instance of ResultsImpl that presents the whole Response.
*/
public ResultsImpl( final Response response ) {
this(response, response.getRecords());
}
/**
* Construct an instance of ResultsImpl.
*/
public ResultsImpl( final Response response,
final List sublist ) {
this.response = response;
this.rowList = sublist;
}
/* (non-Javadoc)
* @See org.teiid.designer.jdbc.data.Results#getMetadata()
*/
@Override
public ResultsMetadata getMetadata() {
return response.getMetadata();
}
/* (non-Javadoc)
* @See org.teiid.designer.jdbc.Results#getRowCount()
*/
@Override
public int getRowCount() {
return this.rowList.size();
}
/* (non-Javadoc)
* @See org.teiid.designer.jdbc.Results#getTotalRowCount()
*/
@Override
public int getTotalRowCount() {
return this.response.getRecords().size();
}
/* (non-Javadoc)
* @See org.teiid.designer.jdbc.Results#getAllRows()
*/
@Override
public Object[] getRows() {
if (this.rowArray == null) {
this.rowArray = this.rowList.toArray();
}
return this.rowArray;
}
/* (non-Javadoc)
* @See org.teiid.designer.jdbc.Results#getCell(java.lang.Object, int)
*/
@Override
public Object getObject( Object row,
int columnIndex ) {
CoreArgCheck.isNotNull(row);
final List record = (List)row;
if (columnIndex >= record.size()) {
return null;
}
return record.get(columnIndex);
}
/* (non-Javadoc)
* @See org.teiid.designer.jdbc.data.Results#getBoolean(java.lang.Object, int)
*/
@Override
public String getString( Object row,
int columnIndex ) {
final Object value = getObject(row, columnIndex);
return (value == null ? null : value.toString());
}
/* (non-Javadoc)
* @See org.teiid.designer.jdbc.data.Results#getBoolean(java.lang.Object, int)
*/
@Override
public boolean getBoolean( Object row,
int columnIndex ) throws JdbcConversionException {
final Object value = getObject(row, columnIndex);
if (value == null) {
return false;
} else if (value instanceof Boolean) {
return ((Boolean)value).booleanValue();
} else if (value instanceof String) {
return Boolean.valueOf((String)value).booleanValue();
}
final Object[] params = new Object[] {value, value.getClass()};
final String msg = JdbcPlugin.Util.getString("ResultsImpl.Unable_to_convert_to_boolean", params); //$NON-NLS-1$
throw new JdbcConversionException(msg);
}
/* (non-Javadoc)
* @See org.teiid.designer.jdbc.data.Results#getShort(java.lang.Object, int)
*/
@Override
public short getShort( Object row,
int columnIndex ) throws JdbcConversionException {
final Object value = getObject(row, columnIndex);
if (value == null) {
return 0;
} else if (value instanceof Integer) {
return ((Integer)value).shortValue();
} else if (value instanceof Short) {
return ((Short)value).shortValue();
} else if (value instanceof Long) {
return ((Long)value).shortValue();
} else if (value instanceof BigDecimal) {
return ((BigDecimal)value).shortValue();
} else if (value instanceof BigInteger) {
return ((BigInteger)value).shortValue();
} else if (value instanceof String) {
try {
return Short.parseShort((String)value);
} catch (NumberFormatException e) {
final Object[] params = new Object[] {value, value.getClass()};
final String msg = JdbcPlugin.Util.getString("ResultsImpl.Unable_to_convert_to_short", params); //$NON-NLS-1$
throw new JdbcConversionException(e, msg);
}
}
final Object[] params = new Object[] {value, value.getClass()};
final String msg = JdbcPlugin.Util.getString("ResultsImpl.Unable_to_convert_to_short", params); //$NON-NLS-1$
throw new JdbcConversionException(msg);
}
/* (non-Javadoc)
* @See org.teiid.designer.jdbc.data.Results#getInt(java.lang.Object, int)
*/
@Override
public int getInt( Object row,
int columnIndex ) throws JdbcConversionException {
final Object value = getObject(row, columnIndex);
if (value == null) {
return 0;
} else if (value instanceof Integer) {
return ((Integer)value).intValue();
} else if (value instanceof Short) {
return ((Short)value).intValue();
} else if (value instanceof Long) {
return ((Long)value).intValue();
} else if (value instanceof BigDecimal) {
return ((BigDecimal)value).intValue();
} else if (value instanceof BigInteger) {
return ((BigInteger)value).intValue();
} else if (value instanceof String) {
try {
return Integer.parseInt((String)value);
} catch (NumberFormatException e) {
final Object[] params = new Object[] {value, value.getClass()};
final String msg = JdbcPlugin.Util.getString("ResultsImpl.Unable_to_convert_to_int", params); //$NON-NLS-1$
throw new JdbcConversionException(e, msg);
}
} else if (value instanceof Float) {
return ((Float)value).intValue();
}
final Object[] params = new Object[] {value, value.getClass()};
final String msg = JdbcPlugin.Util.getString("ResultsImpl.Unable_to_convert_to_int", params); //$NON-NLS-1$
throw new JdbcConversionException(msg);
}
/* (non-Javadoc)
* @See org.teiid.designer.jdbc.data.Results#getLong(java.lang.Object, int)
*/
@Override
public long getLong( Object row,
int columnIndex ) throws JdbcConversionException {
final Object value = getObject(row, columnIndex);
if (value == null) {
return 0;
} else if (value instanceof Long) {
return ((Long)value).longValue();
} else if (value instanceof Integer) {
return ((Integer)value).longValue();
} else if (value instanceof Short) {
return ((Short)value).longValue();
} else if (value instanceof BigDecimal) {
return ((BigDecimal)value).longValue();
} else if (value instanceof BigInteger) {
return ((BigInteger)value).longValue();
} else if (value instanceof String) {
try {
return Long.parseLong((String)value);
} catch (NumberFormatException e) {
final Object[] params = new Object[] {value, value.getClass()};
final String msg = JdbcPlugin.Util.getString("ResultsImpl.Unable_to_convert_to_long", params); //$NON-NLS-1$
throw new JdbcConversionException(e, msg);
}
}
final Object[] params = new Object[] {value, value.getClass()};
final String msg = JdbcPlugin.Util.getString("ResultsImpl.Unable_to_convert_to_long", params); //$NON-NLS-1$
throw new JdbcConversionException(msg);
}
/* (non-Javadoc)
* @See org.teiid.designer.jdbc.data.Results#getFloat(java.lang.Object, int)
*/
@Override
public float getFloat( Object row,
int columnIndex ) throws JdbcConversionException {
final Object value = getObject(row, columnIndex);
if (value == null) {
return 0;
} else if (value instanceof Float) {
return ((Float)value).floatValue();
} else if (value instanceof Double) {
return ((Double)value).floatValue();
} else if (value instanceof BigDecimal) {
return ((BigDecimal)value).floatValue();
} else if (value instanceof String) {
try {
return Float.parseFloat((String)value);
} catch (NumberFormatException e) {
final Object[] params = new Object[] {value, value.getClass()};
final String msg = JdbcPlugin.Util.getString("ResultsImpl.Unable_to_convert_to_float", params); //$NON-NLS-1$
throw new JdbcConversionException(e, msg);
}
}
final Object[] params = new Object[] {value, value.getClass()};
final String msg = JdbcPlugin.Util.getString("ResultsImpl.Unable_to_convert_to_float", params); //$NON-NLS-1$
throw new JdbcConversionException(msg);
}
/* (non-Javadoc)
* @See org.teiid.designer.jdbc.data.Results#getDouble(java.lang.Object, int)
*/
@Override
public double getDouble( Object row,
int columnIndex ) throws JdbcConversionException {
final Object value = getObject(row, columnIndex);
if (value == null) {
return 0;
} else if (value instanceof Float) {
return ((Float)value).doubleValue();
} else if (value instanceof Double) {
return ((Double)value).doubleValue();
} else if (value instanceof BigDecimal) {
return ((BigDecimal)value).doubleValue();
} else if (value instanceof String) {
try {
return Double.parseDouble((String)value);
} catch (NumberFormatException e) {
final Object[] params = new Object[] {value, value.getClass()};
final String msg = JdbcPlugin.Util.getString("ResultsImpl.Unable_to_convert_to_double", params); //$NON-NLS-1$
throw new JdbcConversionException(e, msg);
}
}
final Object[] params = new Object[] {value, value.getClass()};
final String msg = JdbcPlugin.Util.getString("ResultsImpl.Unable_to_convert_to_double", params); //$NON-NLS-1$
throw new JdbcConversionException(msg);
}
/* (non-Javadoc)
* @See org.teiid.designer.jdbc.data.Results#getByte(java.lang.Object, int)
*/
@Override
public byte getByte( Object row,
int columnIndex ) throws JdbcConversionException {
final Object value = getObject(row, columnIndex);
if (value == null) {
return 0;
} else if (value instanceof Byte) {
return ((Byte)value).byteValue();
} else if (value instanceof BigDecimal) {
return ((BigDecimal)value).byteValue();
} else if (value instanceof BigDecimal) {
return ((BigDecimal)value).byteValue();
} else if (value instanceof BigInteger) {
return ((BigInteger)value).byteValue();
} else if (value instanceof String) {
try {
return Byte.parseByte((String)value);
} catch (NumberFormatException e) {
final Object[] params = new Object[] {value, value.getClass()};
final String msg = JdbcPlugin.Util.getString("ResultsImpl.Unable_to_convert_to_byte", params); //$NON-NLS-1$
throw new JdbcConversionException(e, msg);
}
}
final Object[] params = new Object[] {value, value.getClass()};
final String msg = JdbcPlugin.Util.getString("ResultsImpl.Unable_to_convert_to_byte", params); //$NON-NLS-1$
throw new JdbcConversionException(msg);
}
/* (non-Javadoc)
* @See org.teiid.designer.jdbc.data.Results#getBytes(java.lang.Object, int)
*/
@Override
public byte[] getBytes( Object row,
int columnIndex ) throws JdbcConversionException {
final Object value = getObject(row, columnIndex);
if (value == null) {
return null;
} else if (value instanceof BigInteger) {
return ((BigInteger)value).toByteArray();
}
final Object[] params = new Object[] {value, value.getClass()};
final String msg = JdbcPlugin.Util.getString("ResultsImpl.Unable_to_convert_to_byte_array", params); //$NON-NLS-1$
throw new JdbcConversionException(msg);
}
/* (non-Javadoc)
* @See org.teiid.designer.jdbc.data.Results#getDate(java.lang.Object, int)
*/
@Override
public Date getDate( Object row,
int columnIndex ) throws JdbcConversionException {
final Object value = getObject(row, columnIndex);
if (value == null) {
return null;
} else if (value instanceof Date) {
return (Date)value;
} else if (value instanceof java.util.Date) {
final long longvalue = ((java.util.Date)value).getTime();
return new Date(longvalue);
} else if (value instanceof Long) {
final long longValue = ((Long)value).longValue();
return new Date(longValue);
} else if (value instanceof BigDecimal) {
final long longValue = ((BigDecimal)value).longValue();
return new Date(longValue);
} else if (value instanceof BigInteger) {
final long longValue = ((BigInteger)value).longValue();
return new Date(longValue);
}
final Object[] params = new Object[] {value, value.getClass()};
final String msg = JdbcPlugin.Util.getString("ResultsImpl.Unable_to_convert_to_Date", params); //$NON-NLS-1$
throw new JdbcConversionException(msg);
}
/* (non-Javadoc)
* @See org.teiid.designer.jdbc.data.Results#getTimestamp(java.lang.Object, int)
*/
@Override
public Timestamp getTimestamp( Object row,
int columnIndex ) throws JdbcConversionException {
final Object value = getObject(row, columnIndex);
if (value == null) {
return null;
} else if (value instanceof Timestamp) {
return (Timestamp)value;
} else if (value instanceof java.util.Date) {
final long longvalue = ((java.util.Date)value).getTime();
return new Timestamp(longvalue);
} else if (value instanceof Long) {
final long longValue = ((Long)value).longValue();
return new Timestamp(longValue);
} else if (value instanceof BigDecimal) {
final long longValue = ((BigDecimal)value).longValue();
return new Timestamp(longValue);
} else if (value instanceof BigInteger) {
final long longValue = ((BigInteger)value).longValue();
return new Timestamp(longValue);
}
final Object[] params = new Object[] {value, value.getClass()};
final String msg = JdbcPlugin.Util.getString("ResultsImpl.Unable_to_convert_to_Timestamp", params); //$NON-NLS-1$
throw new JdbcConversionException(msg);
}
/* (non-Javadoc)
* @See org.teiid.designer.jdbc.Results#setCell(java.lang.Object, int, java.lang.Object)
*/
@Override
public void setObject( Object row,
int columnIndex,
Object newValue ) {
if (row == null) {
return;
}
final List record = (List)row;
record.set(columnIndex, newValue);
}
/* (non-Javadoc)
* @See org.teiid.designer.jdbc.Results#hasNextResults()
*/
@Override
public boolean hasNextResults() {
return this.next != null;
}
/* (non-Javadoc)
* @See org.teiid.designer.jdbc.Results#getNextResults()
*/
@Override
public Results getNextResults() {
return this.next;
}
/* (non-Javadoc)
* @See org.teiid.designer.jdbc.Results#hasPreviousResults()
*/
@Override
public boolean hasPreviousResults() {
return this.previous != null;
}
/* (non-Javadoc)
* @See org.teiid.designer.jdbc.Results#getPreviousResults()
*/
@Override
public Results getPreviousResults() {
return this.previous;
}
public void setPrevious( final Results prev ) {
this.previous = prev;
}
public void setNext( final Results next ) {
this.next = next;
}
}