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) 2006-2006 Pentaho
008// All Rights Reserved.
009*/
010package mondrian.mdx;
011
012import mondrian.calc.Calc;
013import mondrian.calc.ExpCompiler;
014import mondrian.calc.impl.ConstantCalc;
015import mondrian.olap.*;
016import mondrian.olap.type.DimensionType;
017import mondrian.olap.type.Type;
018
019/**
020 * Usage of a {@link mondrian.olap.Dimension} as an MDX expression.
021 *
022 * @author jhyde
023 * @since Sep 26, 2005
024 */
025public class DimensionExpr extends ExpBase implements Exp {
026    private final Dimension dimension;
027
028    /**
029     * Creates a dimension expression.
030     *
031     * @param dimension Dimension
032     * @pre dimension != null
033     */
034    public DimensionExpr(Dimension dimension) {
035        Util.assertPrecondition(dimension != null, "dimension != null");
036        this.dimension = dimension;
037    }
038
039    /**
040     * Returns the dimension.
041     *
042     * @post return != null
043     */
044    public Dimension getDimension() {
045        return dimension;
046    }
047
048    public String toString() {
049        return dimension.getUniqueName();
050    }
051
052    public Type getType() {
053        return DimensionType.forDimension(dimension);
054    }
055
056    public DimensionExpr clone() {
057        return new DimensionExpr(dimension);
058    }
059
060    public int getCategory() {
061        return Category.Dimension;
062    }
063
064    public Exp accept(Validator validator) {
065        return this;
066    }
067
068    public Calc accept(ExpCompiler compiler) {
069        return ConstantCalc.constantDimension(dimension);
070    }
071
072    public Object accept(MdxVisitor visitor) {
073        return visitor.visit(this);
074    }
075
076}
077
078// End DimensionExpr.java