//
// Copyright (c)1998-2011 Pearson Education, Inc. or its affiliate(s).
// All rights reserved.
//
package openadk.examples.tinysis.data;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.HashMap;
import openadk.library.SIFSimpleType;
import openadk.library.SIFTypeConverter;
import openadk.library.tools.mapping.FieldAdaptor;
import openadk.library.tools.mapping.FieldMapping;
/**
* Rudimentary implementation of an implementation of the ADK FieldAdaptor interface
* that wraps a java.sql.ResultSet
*
*/
public class ResultSetAdapter implements FieldAdaptor {
private ResultSet fSourceData;
private ResultSetMetaData fMetadata;
private HashMap<String,Integer> fColumns;
public ResultSetAdapter( ResultSet sourceData ) throws SQLException
{
fSourceData = sourceData;
fMetadata = sourceData.getMetaData();
fColumns = new HashMap<String,Integer>();
for( int i=0; i<fMetadata.getColumnCount(); i++ ){
fColumns.put( fMetadata.getColumnName( i + 1 ), i + 1 );
}
}
/**
* Moves the cursor in the resultSet to the next row
* @return
* @throws SQLException
*/
public boolean next() throws SQLException
{
return fSourceData.next();
}
/* (non-Javadoc)
* @see openadk.library.tools.mapping.FieldAdaptor#getSIFValue(java.lang.String, openadk.library.SIFTypeConverter, openadk.library.tools.mapping.FieldMapping)
*/
public SIFSimpleType getSIFValue(String name, SIFTypeConverter typeConverter,
FieldMapping fm) {
return typeConverter.getSIFSimpleType( getValue( name ) );
}
/* (non-Javadoc)
* @see openadk.library.tools.mapping.FieldAdaptor#getValue(java.lang.String)
*/
public Object getValue(String name) {
// If mappings are defined incorrectly, this method could throw lots of exceptions,
// so we check the cached list of columns to determine if the column being asked for
// exists before trying to read it
Integer columnIndex = fColumns.get( name );
if( columnIndex == null ){
return null;
}
Object data;
try {
data = fSourceData.getObject( columnIndex );
} catch (SQLException e) {
e.printStackTrace();
return null;
}
return data;
}
/* (non-Javadoc)
* @see openadk.library.tools.mapping.FieldAdaptor#hasField(java.lang.String)
*/
public boolean hasField(String fieldName) {
return fColumns.containsKey( fieldName );
}
/* (non-Javadoc)
* @see openadk.library.tools.mapping.FieldAdaptor#setSIFValue(java.lang.String, openadk.library.SIFSimpleType, openadk.library.tools.mapping.FieldMapping)
*/
public void setSIFValue(String fieldName, SIFSimpleType sifDataElmeent, FieldMapping fm) {
// TODO Update of ResultSet not yet supported
}
}