Package mondrian.olap.fun

Source Code of mondrian.olap.fun.SetToStrFunDef

/*
// $Id: //open/mondrian-release/3.2/src/main/mondrian/olap/fun/SetToStrFunDef.java#1 $
// This software is subject to the terms of the Eclipse Public License v1.0
// Agreement, available at the following URL:
// http://www.eclipse.org/legal/epl-v10.html.
// Copyright (C) 2006-2007 Julian Hyde
// All Rights Reserved.
// You must accept the terms of that agreement to use this software.
*/
package mondrian.olap.fun;

import mondrian.calc.Calc;
import mondrian.calc.ExpCompiler;
import mondrian.calc.ListCalc;
import mondrian.calc.impl.AbstractStringCalc;
import mondrian.mdx.ResolvedFunCall;
import mondrian.olap.Evaluator;
import mondrian.olap.Member;
import mondrian.olap.Exp;
import mondrian.olap.type.SetType;

import java.util.List;

/**
* Definition of the <code>SetToStr</code> MDX function.
*
* @author jhyde
* @version $Id: //open/mondrian-release/3.2/src/main/mondrian/olap/fun/SetToStrFunDef.java#1 $
* @since Aug 3, 2006
*/
class SetToStrFunDef extends FunDefBase {
    public static final FunDefBase instance = new SetToStrFunDef();

    private SetToStrFunDef() {
        super("SetToStr", "Constructs a string from a set.", "fSx");
    }

    public Calc compileCall(ResolvedFunCall call, ExpCompiler compiler) {
        Exp arg = call.getArg(0);
        final ListCalc listCalc = compiler.compileList(arg);
        if (((SetType) arg.getType()).getArity() == 1) {
            return new AbstractStringCalc(call, new Calc[] {listCalc}) {
                public String evaluateString(Evaluator evaluator) {
                    final List<Member> list =
                        (List<Member>) listCalc.evaluateList(evaluator);
                    return memberSetToStr(list);
                }
            };
        } else {
            return new AbstractStringCalc(call, new Calc[] {listCalc}) {
                public String evaluateString(Evaluator evaluator) {
                    final List<Member[]> list =
                        (List<Member[]>) listCalc.evaluateList(evaluator);
                    return tupleSetToStr(list);
                }
            };
        }
    }

    static String memberSetToStr(List<Member> list) {
        StringBuilder buf = new StringBuilder();
        buf.append("{");
        int k = 0;
        for (Member member : list) {
            if (k++ > 0) {
                buf.append(", ");
            }
            buf.append(member.getUniqueName());
        }
        buf.append("}");
        return buf.toString();
    }

    static String tupleSetToStr(List<Member[]> list) {
        StringBuilder buf = new StringBuilder();
        buf.append("{");
        int k = 0;
        for (Member[] members : list) {
            if (k++ > 0) {
                buf.append(", ");
            }
            appendTuple(buf, members);
        }
        buf.append("}");
        return buf.toString();
    }
}

// End SetToStrFunDef.java
TOP

Related Classes of mondrian.olap.fun.SetToStrFunDef

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.