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.*;
013
014import org.olap4j.OlapException;
015import org.olap4j.impl.*;
016import org.olap4j.metadata.Dimension;
017import org.olap4j.metadata.Hierarchy;
018import org.olap4j.metadata.*;
019
020/**
021 * Implementation of {@link org.olap4j.metadata.Dimension}
022 * for the Mondrian OLAP engine.
023 *
024 * @author jhyde
025 * @since May 24, 2007
026 */
027class MondrianOlap4jDimension
028    extends MondrianOlap4jMetadataElement
029    implements Dimension, Named
030{
031    private final MondrianOlap4jSchema olap4jSchema;
032    private final mondrian.olap.Dimension dimension;
033
034    MondrianOlap4jDimension(
035        MondrianOlap4jSchema olap4jSchema,
036        mondrian.olap.Dimension dimension)
037    {
038        this.olap4jSchema = olap4jSchema;
039        this.dimension = dimension;
040    }
041
042    public boolean equals(Object obj) {
043        return obj instanceof MondrianOlap4jDimension
044            && dimension.equals(((MondrianOlap4jDimension) obj).dimension);
045    }
046
047    public int hashCode() {
048        return dimension.hashCode();
049    }
050
051    public NamedList<Hierarchy> getHierarchies() {
052        final NamedList<MondrianOlap4jHierarchy> list =
053            new NamedListImpl<MondrianOlap4jHierarchy>();
054        final MondrianOlap4jConnection olap4jConnection =
055            olap4jSchema.olap4jCatalog.olap4jDatabaseMetaData.olap4jConnection;
056        final mondrian.olap.SchemaReader schemaReader =
057            olap4jConnection.getMondrianConnection2().getSchemaReader()
058            .withLocus();
059        for (mondrian.olap.Hierarchy hierarchy
060            : schemaReader.getDimensionHierarchies(dimension))
061        {
062            list.add(olap4jConnection.toOlap4j(hierarchy));
063        }
064        return Olap4jUtil.cast(list);
065    }
066
067    public Hierarchy getDefaultHierarchy() {
068        return getHierarchies().get(0);
069    }
070
071    public Type getDimensionType() throws OlapException {
072        final DimensionType dimensionType = dimension.getDimensionType();
073        switch (dimensionType) {
074        case StandardDimension:
075            return Type.OTHER;
076        case MeasuresDimension:
077            return Type.MEASURE;
078        case TimeDimension:
079            return Type.TIME;
080        default:
081            throw Util.unexpected(dimensionType);
082        }
083    }
084
085    public String getName() {
086        return dimension.getName();
087    }
088
089    public String getUniqueName() {
090        return dimension.getUniqueName();
091    }
092
093    public String getCaption() {
094        return dimension.getLocalized(
095            OlapElement.LocalizedProperty.CAPTION,
096            olap4jSchema.getLocale());
097    }
098
099    public String getDescription() {
100        return dimension.getLocalized(
101            OlapElement.LocalizedProperty.DESCRIPTION,
102            olap4jSchema.getLocale());
103    }
104
105    public boolean isVisible() {
106        return dimension.isVisible();
107    }
108
109    protected OlapElement getOlapElement() {
110        return dimension;
111    }
112}
113
114// End MondrianOlap4jDimension.java