001    /*
002    // $Id: ParseTreeVisitor.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    /**
013     * Interface for a visitor to an MDX parse tree.
014     *
015     * <p>Together with the
016     * {@link org.olap4j.mdx.ParseTreeNode#accept(ParseTreeVisitor)} method, an
017     * class implementing this interface implements a visitor pattern, to allow
018     * an algorithm to efficiently traverse a parse tree and perform an action at
019     * each node dependent upon the type of each node.
020     *
021     * @author jhyde
022     * @version $Id: ParseTreeVisitor.java 229 2009-05-08 19:11:29Z jhyde $
023     * @since Jul 21, 2006
024     */
025    public interface ParseTreeVisitor<T> {
026        /**
027         * Visits a select statement.
028         *
029         * @param selectNode Node representing a select statement
030         *
031         * @return value yielded by visiting the node
032         *
033         * @see SelectNode#accept(ParseTreeVisitor)
034         */
035        T visit(SelectNode selectNode);
036    
037        /**
038         * Visits an axis of a select statement.
039         *
040         * @param axis Node representing an axis
041         *
042         * @return value yielded by visiting the node
043         *
044         * @see AxisNode#accept(ParseTreeVisitor)
045         */
046        T visit(AxisNode axis);
047    
048        /**
049         * Visits a member declaration.
050         *
051         * @param calcMemberNode Node representing a member declaration
052         *
053         * @return value yielded by visiting the node
054         *
055         * @see WithMemberNode#accept(ParseTreeVisitor)
056         */
057        T visit(WithMemberNode calcMemberNode);
058    
059        /**
060         * Visits a set declaration.
061         *
062         * @param calcSetNode Node representing a set declaration
063         *
064         * @return value yielded by visiting the node
065         *
066         * @see WithSetNode#accept(ParseTreeVisitor)
067         */
068        T visit(WithSetNode calcSetNode);
069    
070        /**
071         * Visits a call to an operator or function.
072         *
073         * @param call Node representing a call to an operator or function
074         *
075         * @see CallNode#accept(ParseTreeVisitor)
076         *
077         * @return value yielded by visiting the node
078         */
079        T visit(CallNode call);
080    
081        /**
082         * Visits an identifier.
083         *
084         * @param id Node representing an identifier
085         *
086         * @return value yielded by visiting the node
087         *
088         * @see IdentifierNode#accept(ParseTreeVisitor)
089         */
090        T visit(IdentifierNode id);
091    
092        /**
093         * Visits a parameter.
094         *
095         * @param parameterNode Node representing use of a parameter
096         *
097         * @return value yielded by visiting the node
098         *
099         * @see ParameterNode#accept(ParseTreeVisitor)
100         */
101        T visit(ParameterNode parameterNode);
102    
103        /**
104         * Visits a use of a {@link org.olap4j.metadata.Cube}
105         * in a select statement.
106         *
107         * @param cubeNode Node representing a use of a Cube
108         *
109         * @return value yielded by visiting the node
110         *
111         * @see CubeNode#accept(ParseTreeVisitor)
112         */
113        T visit(CubeNode cubeNode);
114    
115        /**
116         * Visits a use of a {@link org.olap4j.metadata.Dimension}
117         * in a select statement.
118         *
119         * @param dimensionNode Node representing a use of a Dimension
120         *
121         * @return value yielded by visiting the node
122         *
123         * @see DimensionNode#accept(ParseTreeVisitor)
124         */
125        T visit(DimensionNode dimensionNode);
126    
127        /**
128         * Visits a use of a {@link org.olap4j.metadata.Hierarchy}
129         * in a select statement.
130         *
131         * @param hierarchyNode Node representing a use of a Hierarchy
132         *
133         * @return value yielded by visiting the node
134         *
135         * @see HierarchyNode#accept(ParseTreeVisitor)
136         */
137        T visit(HierarchyNode hierarchyNode);
138    
139        /**
140         * Visits a use of a {@link org.olap4j.metadata.Level}
141         * in a select statement.
142         *
143         * @param levelNode Node representing a use of a Level
144         *
145         * @return value yielded by visiting the node
146         *
147         * @see LevelNode#accept(ParseTreeVisitor)
148         */
149        T visit(LevelNode levelNode);
150    
151        /**
152         * Visits a use of a {@link org.olap4j.metadata.Member}
153         * in a select statement.
154         *
155         * @param memberNode Node representing a use of a Member
156         *
157         * @return value yielded by visiting the node
158         *
159         * @see MemberNode#accept(ParseTreeVisitor)
160         */
161        T visit(MemberNode memberNode);
162    
163        /**
164         * Visits a literal.
165         *
166         * @param literalNode Node representing a Literal
167         *
168         * @return value yielded by visiting the node
169         *
170         * @see LiteralNode#accept(ParseTreeVisitor)
171         */
172        T visit(LiteralNode literalNode);
173    
174        /**
175         * Visits a property-value pair.
176         *
177         * @param propertyValueNode Node representing a property-value pair
178         *
179         * @return value yielded by visiting the node
180         *
181         * @see PropertyValueNode#accept(ParseTreeVisitor)
182         */
183        T visit(PropertyValueNode propertyValueNode);
184    }
185    
186    // End ParseTreeVisitor.java