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