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