001    /*
002    // $Id: //open/mondrian/src/main/mondrian/mdx/HierarchyExpr.java#5 $
003    // This software is subject to the terms of the Common Public License
004    // Agreement, available at the following URL:
005    // http://www.opensource.org/licenses/cpl.html.
006    // Copyright (C) 2006-2006 Julian Hyde
007    // All Rights Reserved.
008    // You must accept the terms of that agreement to use this software.
009    */
010    package mondrian.mdx;
011    
012    import mondrian.olap.*;
013    import mondrian.olap.type.HierarchyType;
014    import mondrian.olap.type.Type;
015    import mondrian.calc.*;
016    import mondrian.calc.impl.ConstantCalc;
017    
018    /**
019     * Usage of a {@link mondrian.olap.Hierarchy} as an MDX expression.
020     *
021     * @author jhyde
022     * @version $Id: //open/mondrian/src/main/mondrian/mdx/HierarchyExpr.java#5 $
023     * @since Sep 26, 2005
024     */
025    public class HierarchyExpr extends ExpBase implements Exp {
026        private final Hierarchy hierarchy;
027    
028        /**
029         * Creates a hierarchy expression.
030         *
031         * @param hierarchy Hierarchy
032         * @pre hierarchy != null
033         */
034        public HierarchyExpr(Hierarchy hierarchy) {
035            Util.assertPrecondition(hierarchy != null, "hierarchy != null");
036            this.hierarchy = hierarchy;
037        }
038    
039        /**
040         * Returns the hierarchy.
041         *
042         * @post return != null
043         */
044        public Hierarchy getHierarchy() {
045            return hierarchy;
046        }
047    
048        public String toString() {
049            return hierarchy.getUniqueName();
050        }
051    
052        public Type getType() {
053            return HierarchyType.forHierarchy(hierarchy);
054        }
055    
056        public HierarchyExpr clone() {
057            return new HierarchyExpr(hierarchy);
058        }
059    
060        public int getCategory() {
061            return Category.Hierarchy;
062        }
063    
064        public Exp accept(Validator validator) {
065            return this;
066        }
067    
068        public Calc accept(ExpCompiler compiler) {
069            return ConstantCalc.constantHierarchy(hierarchy);
070        }
071    
072        public Object accept(MdxVisitor visitor) {
073            return visitor.visit(this);
074        }
075    }
076    
077    // End HierarchyExpr.java