001    /*
002    // $Id: MemberNode.java 229 2009-05-08 19:11:29Z jhyde $
003    // This software is subject to the terms of the Eclipse Public License v1.0
004    // Agreement, available at the following URL:
005    // http://www.eclipse.org/legal/epl-v10.html.
006    // Copyright (C) 2007-2008 Julian Hyde
007    // All Rights Reserved.
008    // You must accept the terms of that agreement to use this software.
009    */
010    package org.olap4j.mdx;
011    
012    import org.olap4j.type.Type;
013    import org.olap4j.type.MemberType;
014    import org.olap4j.metadata.Member;
015    
016    /**
017     * Usage of a {@link org.olap4j.metadata.Member} as an expression in an MDX
018     * parse tree.
019     *
020     * @author jhyde
021     * @version $Id: MemberNode.java 229 2009-05-08 19:11:29Z jhyde $
022     * @since Jun 4, 2007
023     */
024    public class MemberNode implements ParseTreeNode {
025        private final ParseRegion region;
026        private final Member member;
027    
028        /**
029         * Creates a MemberNode.
030         *
031         * @param region Region of source code
032         * @param member Member which is used in the expression
033         */
034        public MemberNode(
035            ParseRegion region,
036            Member member)
037        {
038            this.region = region;
039            this.member = member;
040        }
041    
042        public ParseRegion getRegion() {
043            return region;
044        }
045    
046        /**
047         * Returns the Member used in this expression.
048         *
049         * @return member used in this expression
050         */
051        public Member getMember() {
052            return member;
053        }
054    
055        public <T> T accept(ParseTreeVisitor<T> visitor) {
056            return visitor.visit(this);
057        }
058    
059        public Type getType() {
060            return new MemberType(
061                member.getDimension(),
062                member.getHierarchy(),
063                member.getLevel(),
064                member);
065        }
066    
067        public void unparse(ParseTreeWriter writer) {
068            writer.getPrintWriter().print(member.getUniqueName());
069        }
070    
071        public String toString() {
072            return member.getUniqueName();
073        }
074    
075        public MemberNode deepCopy() {
076            // MemberNode is immutable
077            return this;
078        }
079    }
080    
081    // End MemberNode.java