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-2010 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.MemberType;
017import mondrian.olap.type.Type;
018
019/**
020 * Usage of a {@link mondrian.olap.Member} as an MDX expression.
021 *
022 * @author jhyde
023 * @since Sep 26, 2005
024 */
025public class MemberExpr extends ExpBase implements Exp {
026    private final Member member;
027    private MemberType type;
028
029    /**
030     * Creates a member expression.
031     *
032     * @param member Member
033     * @pre member != null
034     */
035    public MemberExpr(Member member) {
036        Util.assertPrecondition(member != null, "member != null");
037        this.member = member;
038    }
039
040    /**
041     * Returns the member.
042     *
043     * @post return != null
044     */
045    public Member getMember() {
046        return member;
047    }
048
049    public String toString() {
050        return member.getUniqueName();
051    }
052
053    public Type getType() {
054        if (type == null) {
055            type = MemberType.forMember(member);
056        }
057        return type;
058    }
059
060    public MemberExpr clone() {
061        return new MemberExpr(member);
062    }
063
064    public int getCategory() {
065        return Category.Member;
066    }
067
068    public Exp accept(Validator validator) {
069        return this;
070    }
071
072    public Calc accept(ExpCompiler compiler) {
073        return ConstantCalc.constantMember(member);
074    }
075
076    public Object accept(MdxVisitor visitor) {
077        return visitor.visit(this);
078    }
079}
080
081// End MemberExpr.java