private void addCatalogToCache( IPentahoSession session, String catalogName ) {
final IOlapService.Catalog catalog =
new Catalog( catalogName, new ArrayList<IOlapService.Schema>() );
OlapConnection connection = null;
try {
connection =
getConnection( catalogName, session );
for ( org.olap4j.metadata.Schema schema4j : connection.getOlapSchemas() ) {
connection.setSchema( schema4j.getName() );
final IOlapService.Schema schema =
new Schema(
schema4j.getName(),
catalog,
new ArrayList<IOlapService.Cube>(),
new ArrayList<String>( connection.getAvailableRoleNames() ) );
for ( org.olap4j.metadata.Cube cube4j : schema4j.getCubes() ) {
schema.cubes.add(
new IOlapService.Cube( cube4j.getName(), cube4j.getCaption(), schema ) );
}
catalog.schemas.add( schema );
}
// We're done.
getCache( session ).add( catalog );
} catch ( OlapException e ) {
LOG.warn(
"Failed to initialize the olap connection cache for catalog "
+ catalogName,
e );
} finally {
try {
if ( connection != null ) {
connection.close();
}
} catch ( SQLException e ) {
LOG.warn(
"Failed to gracefully close an olap connection to catalog "
+ catalogName,