001/* 002// This software is subject to the terms of the Eclipse Public License v1.0 003// Agreement, available at the following URL: 004// http://www.eclipse.org/legal/epl-v10.html. 005// You must accept the terms of that agreement to use this software. 006// 007// Copyright (C) 2007-2012 Pentaho 008// All Rights Reserved. 009*/ 010package mondrian.olap4j; 011 012import mondrian.olap.Access; 013import mondrian.olap.OlapElement; 014import mondrian.rolap.RolapSchema; 015 016import org.olap4j.OlapDatabaseMetaData; 017import org.olap4j.OlapException; 018import org.olap4j.impl.*; 019import org.olap4j.metadata.*; 020 021import java.util.Map; 022 023/** 024 * Implementation of {@link Catalog} 025 * for the Mondrian OLAP engine. 026 * 027 * @author jhyde 028 * @since May 23, 2007 029 */ 030class MondrianOlap4jCatalog 031 extends MondrianOlap4jMetadataElement 032 implements Catalog, Named 033{ 034 final MondrianOlap4jDatabaseMetaData olap4jDatabaseMetaData; 035 final String name; 036 final Map<String, RolapSchema> schemaMap; 037 final MondrianOlap4jDatabase olap4jDatabase; 038 039 MondrianOlap4jCatalog( 040 MondrianOlap4jDatabaseMetaData olap4jDatabaseMetaData, 041 String name, 042 MondrianOlap4jDatabase database, 043 Map<String, RolapSchema> schemaMap) 044 { 045 assert database != null; 046 this.olap4jDatabaseMetaData = olap4jDatabaseMetaData; 047 this.name = name; 048 this.olap4jDatabase = database; 049 this.schemaMap = schemaMap; 050 // Make sure to register the schemas. 051 for (Map.Entry<String, RolapSchema> entry : schemaMap.entrySet()) { 052 String schemaName = entry.getKey(); 053 final mondrian.olap.Schema schema = entry.getValue(); 054 if (schemaName == null) { 055 schemaName = schema.getName(); 056 } 057 MondrianOlap4jSchema olap4jSchema = 058 new MondrianOlap4jSchema( 059 this, schemaName, schema); 060 olap4jDatabaseMetaData.olap4jConnection.schemaMap.put( 061 schema, olap4jSchema); 062 } 063 } 064 065 public NamedList<Schema> getSchemas() throws OlapException { 066 final NamedList<MondrianOlap4jSchema> list = 067 new NamedListImpl<MondrianOlap4jSchema>(); 068 for (Map.Entry<String, RolapSchema> entry : schemaMap.entrySet()) { 069 String schemaName = entry.getKey(); 070 final mondrian.olap.Schema schema = entry.getValue(); 071 final MondrianOlap4jConnection oConn = 072 ((MondrianOlap4jConnection)olap4jDatabase 073 .getOlapConnection()); 074 if (oConn 075 .getMondrianConnection().getRole().getAccess(schema) 076 != Access.NONE) 077 { 078 if (schemaName == null) { 079 schemaName = schema.getName(); 080 } 081 MondrianOlap4jSchema olap4jSchema = 082 new MondrianOlap4jSchema( 083 this, schemaName, schema); 084 list.add(olap4jSchema); 085 } 086 } 087 return Olap4jUtil.cast(list); 088 } 089 090 public String getName() { 091 return name; 092 } 093 094 public OlapDatabaseMetaData getMetaData() { 095 return olap4jDatabaseMetaData; 096 } 097 098 public Database getDatabase() { 099 return olap4jDatabase; 100 } 101 102 protected OlapElement getOlapElement() { 103 return null; 104 } 105} 106 107// End MondrianOlap4jCatalog.java