KickJava   Java API By Example, From Geeks To Geeks.

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


1 /*
2 // $Id: //open/mondrian/src/main/mondrian/olap/fun/TupleToStrFunDef.java#2 $
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.calc.Calc;
13 import mondrian.calc.ExpCompiler;
14 import mondrian.calc.MemberCalc;
15 import mondrian.calc.TupleCalc;
16 import mondrian.calc.impl.AbstractStringCalc;
17 import mondrian.mdx.ResolvedFunCall;
18 import mondrian.olap.type.TypeUtil;
19 import mondrian.olap.Evaluator;
20 import mondrian.olap.Member;
21
22 /**
23  * Definition of the <code>TupleToStr</code> MDX function.
24  *
25  * @author jhyde
26  * @version $Id: //open/mondrian/src/main/mondrian/olap/fun/TupleToStrFunDef.java#2 $
27  * @since Aug 3, 2006
28  */

29 class TupleToStrFunDef extends FunDefBase {
30     static final TupleToStrFunDef instance = new TupleToStrFunDef();
31
32     private TupleToStrFunDef() {
33         super("TupleToStr", "TupleToStr(<Tuple>)", "Constructs a string from a tuple.", "fSt");
34     }
35
36     public Calc compileCall(ResolvedFunCall call, ExpCompiler compiler) {
37         if (TypeUtil.couldBeMember(call.getArg(0).getType())) {
38             final MemberCalc memberCalc =
39                     compiler.compileMember(call.getArg(0));
40             return new AbstractStringCalc(call, new Calc[] {memberCalc}) {
41                 public String JavaDoc evaluateString(Evaluator evaluator) {
42                     final Member member =
43                             memberCalc.evaluateMember(evaluator);
44                     if (member.isNull()) {
45                         return "";
46                     }
47                     StringBuilder JavaDoc buf = new StringBuilder JavaDoc();
48                     buf.append(member.getUniqueName());
49                     return buf.toString();
50                 }
51             };
52         } else {
53             final TupleCalc tupleCalc =
54                     compiler.compileTuple(call.getArg(0));
55             return new AbstractStringCalc(call, new Calc[] {tupleCalc}) {
56                 public String JavaDoc evaluateString(Evaluator evaluator) {
57                     final Member[] members =
58                             tupleCalc.evaluateTuple(evaluator);
59                     if (members == null) {
60                         return "";
61                     }
62                     StringBuilder JavaDoc buf = new StringBuilder JavaDoc();
63                     SetToStrFunDef.appendTuple(buf, members);
64                     return buf.toString();
65                 }
66             };
67         }
68     }
69
70 }
71
72 // End TupleToStrFunDef.java
73
Popular Tags