/*
* This software is subject to the terms of the Eclipse Public License v1.0
* Agreement, available at the following URL:
* http://www.eclipse.org/legal/epl-v10.html.
* You must accept the terms of that agreement to use this software.
*
* Copyright (c) 2002-2013 Pentaho Corporation.. All rights reserved.
*/
package mondrian.olap4j;
import mondrian.olap.Access;
import mondrian.olap.OlapElement;
import mondrian.rolap.RolapSchema;
import org.olap4j.OlapDatabaseMetaData;
import org.olap4j.OlapException;
import org.olap4j.impl.*;
import org.olap4j.metadata.*;
import java.util.Map;
/**
* Implementation of {@link Catalog}
* for the Mondrian OLAP engine.
*
* @author jhyde
* @since May 23, 2007
*/
class MondrianOlap4jCatalog
extends MondrianOlap4jMetadataElement
implements Catalog, Named
{
final MondrianOlap4jDatabaseMetaData olap4jDatabaseMetaData;
final String name;
final Map<String, RolapSchema> schemaMap;
final MondrianOlap4jDatabase olap4jDatabase;
MondrianOlap4jCatalog(
MondrianOlap4jDatabaseMetaData olap4jDatabaseMetaData,
String name,
MondrianOlap4jDatabase database,
Map<String, RolapSchema> schemaMap)
{
assert database != null;
this.olap4jDatabaseMetaData = olap4jDatabaseMetaData;
this.name = name;
this.olap4jDatabase = database;
this.schemaMap = schemaMap;
// Make sure to register the schemas.
for (Map.Entry<String, RolapSchema> entry : schemaMap.entrySet()) {
String schemaName = entry.getKey();
final mondrian.olap.Schema schema = entry.getValue();
if (schemaName == null) {
schemaName = schema.getName();
}
MondrianOlap4jSchema olap4jSchema =
new MondrianOlap4jSchema(
this, schemaName, schema);
olap4jDatabaseMetaData.olap4jConnection.schemaMap.put(
schema, olap4jSchema);
}
}
public NamedList<Schema> getSchemas() throws OlapException {
final NamedList<MondrianOlap4jSchema> list =
new NamedListImpl<MondrianOlap4jSchema>();
for (Map.Entry<String, RolapSchema> entry : schemaMap.entrySet()) {
String schemaName = entry.getKey();
final mondrian.olap.Schema schema = entry.getValue();
final MondrianOlap4jConnection oConn =
((MondrianOlap4jConnection)olap4jDatabase
.getOlapConnection());
if (oConn
.getMondrianConnection().getRole().getAccess(schema)
!= Access.NONE)
{
if (schemaName == null) {
schemaName = schema.getName();
}
MondrianOlap4jSchema olap4jSchema =
new MondrianOlap4jSchema(
this, schemaName, schema);
list.add(olap4jSchema);
}
}
return Olap4jUtil.cast(list);
}
public String getName() {
return name;
}
public OlapDatabaseMetaData getMetaData() {
return olap4jDatabaseMetaData;
}
public Database getDatabase() {
return olap4jDatabase;
}
protected OlapElement getOlapElement() {
return null;
}
}
// End MondrianOlap4jCatalog.java