KickJava   Java API By Example, From Geeks To Geeks.

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


1 /*
2 // $Id: //open/mondrian/src/main/mondrian/olap/fun/SetToStrFunDef.java#3 $
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.ListCalc;
15 import mondrian.calc.impl.AbstractStringCalc;
16 import mondrian.mdx.ResolvedFunCall;
17 import mondrian.olap.Evaluator;
18 import mondrian.olap.Member;
19 import mondrian.olap.Exp;
20 import mondrian.olap.type.SetType;
21
22 import java.util.List JavaDoc;
23
24 /**
25  * Definition of the <code>SetToStr</code> MDX function.
26  *
27  * @author jhyde
28  * @version $Id: //open/mondrian/src/main/mondrian/olap/fun/SetToStrFunDef.java#3 $
29  * @since Aug 3, 2006
30  */

31 class SetToStrFunDef extends FunDefBase {
32     public static final FunDefBase instance = new SetToStrFunDef();
33
34     private SetToStrFunDef() {
35         super("SetToStr", "SetToStr(<Set>)", "Constructs a string from a set.", "fSx");
36     }
37
38     public Calc compileCall(ResolvedFunCall call, ExpCompiler compiler) {
39         Exp arg = call.getArg(0);
40         final ListCalc listCalc = compiler.compileList(arg);
41         if (((SetType) arg.getType()).getArity() == 1) {
42             return new AbstractStringCalc(call, new Calc[] {listCalc}) {
43                 public String JavaDoc evaluateString(Evaluator evaluator) {
44                     final List JavaDoc<Member> list =
45                         (List JavaDoc<Member>) listCalc.evaluateList(evaluator);
46                     return memberSetToStr(list);
47                 }
48             };
49         } else {
50             return new AbstractStringCalc(call, new Calc[] {listCalc}) {
51                 public String JavaDoc evaluateString(Evaluator evaluator) {
52                     final List JavaDoc<Member[]> list =
53                         (List JavaDoc<Member[]>) listCalc.evaluateList(evaluator);
54                     return tupleSetToStr(list);
55                 }
56             };
57         }
58     }
59
60     static String JavaDoc memberSetToStr(List JavaDoc<Member> list) {
61         StringBuilder JavaDoc buf = new StringBuilder JavaDoc();
62         buf.append("{");
63         int k = 0;
64         for (Member member : list) {
65             if (k++ > 0) {
66                 buf.append(", ");
67             }
68             buf.append(member.getUniqueName());
69         }
70         buf.append("}");
71         return buf.toString();
72     }
73
74     static String JavaDoc tupleSetToStr(List JavaDoc<Member[]> list) {
75         StringBuilder JavaDoc buf = new StringBuilder JavaDoc();
76         buf.append("{");
77         int k = 0;
78         for (Member[] members : list) {
79             if (k++ > 0) {
80                 buf.append(", ");
81             }
82             appendTuple(buf, members);
83         }
84         buf.append("}");
85         return buf.toString();
86     }
87 }
88
89 // End SetToStrFunDef.java
90
Popular Tags