KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > mondrian > olap > fun > MemberLevelFunDef


1 /*
2 // $Id: //open/mondrian/src/main/mondrian/olap/fun/MemberLevelFunDef.java#1 $
3 // This software is subject to the terms of the Common Public License
4 // Agreement, available at the following URL:
5 // http://www.opensource.org/licenses/cpl.html.
6 // Copyright (C) 2006-2006 Julian Hyde
7 // All Rights Reserved.
8 // You must accept the terms of that agreement to use this software.
9 */

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 /**
22  * Definition of the <code>&lt;Member&gt;.Level</code> MDX builtin function.
23  *
24  * @author jhyde
25  * @version $Id: //open/mondrian/src/main/mondrian/olap/fun/MemberLevelFunDef.java#1 $
26  * @since Mar 23, 2006
27  */

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 // End MemberLevelFunDef.java
62
Popular Tags