package com.github.wicketoracle.app.data.list;
import java.sql.SQLException;
import oracle.jdbc.OracleCallableStatement;
import oracle.jdbc.OracleResultSet;
import oracle.jdbc.OracleTypes;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.github.wicketoracle.app.data.RequiredRoles;
import com.github.wicketoracle.oracle.dao.AbstractOracleDAO;
import com.github.wicketoracle.oracle.util.CloseResource;
public abstract class AbstractListMgrDAO extends AbstractOracleDAO
{
/** Log */
private static final Logger LOGGER = LoggerFactory.getLogger( AbstractListMgrDAO.class );
/**
* Constructor
*/
public AbstractListMgrDAO( final String pUsername , final String pPassword ) throws SQLException
{
super( pUsername , pPassword );
}
public final ListMetaData getMetaData( final int pDataStructureId ) throws SQLException
{
final String dbStatement = " begin "
+ " sys.dbms_application_info.set_module( module_name => ? , action_name => ? ); "
+ " ? := app_refdata.pk_ref_data_mgr.fn_get_list_metadata( p_rds_id => ?);"
+ " end; ";
OracleCallableStatement dbCstmt = null;
OracleResultSet dbRs = null;
ListMetaData metaData = new ListMetaData();
try
{
LOGGER.debug( "Retrieve list data" );
setRole( RequiredRoles.ROLE_REF_DATA_MGR );
LOGGER.debug( "Roles set" );
dbCstmt = ( OracleCallableStatement ) getConnection().prepareCall( dbStatement );
LOGGER.debug( "DB statement prepared -> {}" , dbStatement );
dbCstmt.setString( 1 , "PK_REF_DATA_MGR" );
dbCstmt.setString( 2 , "FN_GET_LIST_METADATA" );
dbCstmt.registerOutParameter( 3 , OracleTypes.CURSOR );
dbCstmt.setInt( 4 , pDataStructureId );
LOGGER.debug( "DB params registered" );
dbCstmt.execute();
LOGGER.debug( "DB statement executed" );
dbRs = ( OracleResultSet ) dbCstmt.getCursor( 3 );
dbRs.next();
metaData.setCodeMaxLength( dbRs.getInt( "MAX_CODE_LENGTH" ) );
metaData.setItemNameMaxLength( dbRs.getInt( "MAX_NAME_LENGTH" ) );
return metaData;
}
catch ( SQLException sqle )
{
LOGGER.error
(
"SQL Exception whilst retrieving list ref data -> {}; error code -> {}; sql state -> {}; pRdsId -> {}"
, new Object [ ]
{
sqle.getMessage()
, sqle.getErrorCode()
, sqle.getSQLState()
, pDataStructureId
}
);
throw sqle;
}
finally
{
CloseResource.close( dbRs );
CloseResource.close( dbCstmt );
}
}
}