/**
SpagoBI, the Open Source Business Intelligence suite
Copyright (C) 2012 Engineering Ingegneria Informatica S.p.A. - SpagoBI Competency Center
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this file,
You can obtain one at http://mozilla.org/MPL/2.0/.
**/
package it.eng.spagobi.studio.oda.impl;
import it.eng.spagobi.sdk.datasets.bo.SDKDataStoreMetadata;
import it.eng.spagobi.server.services.api.bo.IDataStoreMetadata;
import it.eng.spagobi.studio.utils.bo.DataStoreMetadata;
import org.eclipse.datatools.connectivity.oda.IResultSetMetaData;
import org.eclipse.datatools.connectivity.oda.OdaException;
/**
* Implementation class of IResultSetMetaData for an ODA runtime driver.
* <br>
* For demo purpose, the auto-generated method stubs have
* hard-coded implementation that returns a pre-defined set
* of meta-data and query results.
* A custom ODA driver is expected to implement own data source specific
* behavior in its place.
*/
public class ResultSetMetaData implements IResultSetMetaData
{
IDataStoreMetadata dataStoreMeta;
public ResultSetMetaData(IDataStoreMetadata dataStoreMeta) {
this.dataStoreMeta = dataStoreMeta;
}
/*
* @see org.eclipse.datatools.connectivity.oda.IResultSetMetaData#getColumnCount()
*/
public int getColumnCount() throws OdaException
{
int columnCount = 0;
try {
columnCount = dataStoreMeta.getFieldsMetadata().length;
} catch(Throwable t) {
throw (OdaException) new OdaException("Impossible to extract column count from data store meta").initCause(t);
}
return columnCount;
}
/*
* @see org.eclipse.datatools.connectivity.oda.IResultSetMetaData#getColumnName(int)
*/
public String getColumnName( int index ) throws OdaException
{
String name = "undefined";
try {
name = dataStoreMeta.getFieldsMetadata()[index-1].getName();
} catch(Throwable t) {
throw (OdaException) new OdaException("Impossible to extract column-" + index + "'s name from data store meta").initCause(t);
}
return name;
}
/*
* @see org.eclipse.datatools.connectivity.oda.IResultSetMetaData#getColumnLabel(int)
*/
public String getColumnLabel( int index ) throws OdaException
{
return getColumnName( index ); // default
}
/*
* @see org.eclipse.datatools.connectivity.oda.IResultSetMetaData#getColumnType(int)
*/
public int getColumnType( int index ) throws OdaException
{
String className = dataStoreMeta.getFieldsMetadata()[index-1].getClassName();
if( className.endsWith("Integer") ) {
return java.sql.Types.INTEGER;
}
return java.sql.Types.CHAR;
}
/*
* @see org.eclipse.datatools.connectivity.oda.IResultSetMetaData#getColumnTypeName(int)
*/
public String getColumnTypeName( int index ) throws OdaException
{
int nativeTypeCode = getColumnType( index );
return Driver.getNativeDataTypeName( nativeTypeCode );
}
/*
* @see org.eclipse.datatools.connectivity.oda.IResultSetMetaData#getColumnDisplayLength(int)
*/
public int getColumnDisplayLength( int index ) throws OdaException
{
// hard-coded for demo purpose
return 8;
}
/*
* @see org.eclipse.datatools.connectivity.oda.IResultSetMetaData#getPrecision(int)
*/
public int getPrecision( int index ) throws OdaException
{
// TODO Auto-generated method stub
return -1;
}
/*
* @see org.eclipse.datatools.connectivity.oda.IResultSetMetaData#getScale(int)
*/
public int getScale( int index ) throws OdaException
{
// TODO Auto-generated method stub
return -1;
}
/*
* @see org.eclipse.datatools.connectivity.oda.IResultSetMetaData#isNullable(int)
*/
public int isNullable( int index ) throws OdaException
{
// TODO Auto-generated method stub
return IResultSetMetaData.columnNullableUnknown;
}
}