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