1 10 package mondrian.olap.fun; 11 12 import mondrian.olap.type.Type; 13 import mondrian.olap.type.LevelType; 14 import mondrian.olap.*; 15 import mondrian.calc.Calc; 16 import mondrian.calc.ExpCompiler; 17 import mondrian.calc.MemberCalc; 18 import mondrian.calc.impl.AbstractLevelCalc; 19 import mondrian.mdx.ResolvedFunCall; 20 21 28 public class MemberLevelFunDef extends FunDefBase { 29 static final MemberLevelFunDef instance = new MemberLevelFunDef(); 30 31 private MemberLevelFunDef() { 32 super("Level", "<Member>.Level", "Returns a member's level.", "plm"); 33 } 34 35 public Type getResultType(Validator validator, Exp[] args) { 36 final Type argType = args[0].getType(); 37 return LevelType.forType(argType); 38 } 39 40 public Calc compileCall(ResolvedFunCall call, ExpCompiler compiler) { 41 final MemberCalc memberCalc = 42 compiler.compileMember(call.getArg(0)); 43 return new CalcImpl(call, memberCalc); 44 } 45 46 public static class CalcImpl extends AbstractLevelCalc { 47 private final MemberCalc memberCalc; 48 49 public CalcImpl(Exp exp, MemberCalc memberCalc) { 50 super(exp, new Calc[] {memberCalc}); 51 this.memberCalc = memberCalc; 52 } 53 54 public Level evaluateLevel(Evaluator evaluator) { 55 Member member = memberCalc.evaluateMember(evaluator); 56 return member.getLevel(); 57 } 58 } 59 } 60 61 | Popular Tags |