001/*
002// $Id: ParseTreeVisitor.java 482 2012-01-05 23:27:27Z jhyde $
003//
004// Licensed to Julian Hyde under one or more contributor license
005// agreements. See the NOTICE file distributed with this work for
006// additional information regarding copyright ownership.
007//
008// Julian Hyde licenses this file to you under the Apache License,
009// Version 2.0 (the "License"); you may not use this file except in
010// compliance with the License. You may obtain a copy of the License at:
011//
012// http://www.apache.org/licenses/LICENSE-2.0
013//
014// Unless required by applicable law or agreed to in writing, software
015// distributed under the License is distributed on an "AS IS" BASIS,
016// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
017// See the License for the specific language governing permissions and
018// limitations under the License.
019*/
020package org.olap4j.mdx;
021
022/**
023 * Interface for a visitor to an MDX parse tree.
024 *
025 * <p>Together with the
026 * {@link org.olap4j.mdx.ParseTreeNode#accept(ParseTreeVisitor)} method, an
027 * class implementing this interface implements a visitor pattern, to allow
028 * an algorithm to efficiently traverse a parse tree and perform an action at
029 * each node dependent upon the type of each node.
030 *
031 * @author jhyde
032 * @version $Id: ParseTreeVisitor.java 482 2012-01-05 23:27:27Z jhyde $
033 * @since Jul 21, 2006
034 */
035public interface ParseTreeVisitor<T> {
036    /**
037     * Visits a select statement.
038     *
039     * @param selectNode Node representing a select statement
040     *
041     * @return value yielded by visiting the node
042     *
043     * @see SelectNode#accept(ParseTreeVisitor)
044     */
045    T visit(SelectNode selectNode);
046
047    /**
048     * Visits an axis of a select statement.
049     *
050     * @param axis Node representing an axis
051     *
052     * @return value yielded by visiting the node
053     *
054     * @see AxisNode#accept(ParseTreeVisitor)
055     */
056    T visit(AxisNode axis);
057
058    /**
059     * Visits a member declaration.
060     *
061     * @param calcMemberNode Node representing a member declaration
062     *
063     * @return value yielded by visiting the node
064     *
065     * @see WithMemberNode#accept(ParseTreeVisitor)
066     */
067    T visit(WithMemberNode calcMemberNode);
068
069    /**
070     * Visits a set declaration.
071     *
072     * @param calcSetNode Node representing a set declaration
073     *
074     * @return value yielded by visiting the node
075     *
076     * @see WithSetNode#accept(ParseTreeVisitor)
077     */
078    T visit(WithSetNode calcSetNode);
079
080    /**
081     * Visits a call to an operator or function.
082     *
083     * @param call Node representing a call to an operator or function
084     *
085     * @see CallNode#accept(ParseTreeVisitor)
086     *
087     * @return value yielded by visiting the node
088     */
089    T visit(CallNode call);
090
091    /**
092     * Visits an identifier.
093     *
094     * @param id Node representing an identifier
095     *
096     * @return value yielded by visiting the node
097     *
098     * @see IdentifierNode#accept(ParseTreeVisitor)
099     */
100    T visit(IdentifierNode id);
101
102    /**
103     * Visits a parameter.
104     *
105     * @param parameterNode Node representing use of a parameter
106     *
107     * @return value yielded by visiting the node
108     *
109     * @see ParameterNode#accept(ParseTreeVisitor)
110     */
111    T visit(ParameterNode parameterNode);
112
113    /**
114     * Visits a use of a {@link org.olap4j.metadata.Cube}
115     * in a select statement.
116     *
117     * @param cubeNode Node representing a use of a Cube
118     *
119     * @return value yielded by visiting the node
120     *
121     * @see CubeNode#accept(ParseTreeVisitor)
122     */
123    T visit(CubeNode cubeNode);
124
125    /**
126     * Visits a use of a {@link org.olap4j.metadata.Dimension}
127     * in a select statement.
128     *
129     * @param dimensionNode Node representing a use of a Dimension
130     *
131     * @return value yielded by visiting the node
132     *
133     * @see DimensionNode#accept(ParseTreeVisitor)
134     */
135    T visit(DimensionNode dimensionNode);
136
137    /**
138     * Visits a use of a {@link org.olap4j.metadata.Hierarchy}
139     * in a select statement.
140     *
141     * @param hierarchyNode Node representing a use of a Hierarchy
142     *
143     * @return value yielded by visiting the node
144     *
145     * @see HierarchyNode#accept(ParseTreeVisitor)
146     */
147    T visit(HierarchyNode hierarchyNode);
148
149    /**
150     * Visits a use of a {@link org.olap4j.metadata.Level}
151     * in a select statement.
152     *
153     * @param levelNode Node representing a use of a Level
154     *
155     * @return value yielded by visiting the node
156     *
157     * @see LevelNode#accept(ParseTreeVisitor)
158     */
159    T visit(LevelNode levelNode);
160
161    /**
162     * Visits a use of a {@link org.olap4j.metadata.Member}
163     * in a select statement.
164     *
165     * @param memberNode Node representing a use of a Member
166     *
167     * @return value yielded by visiting the node
168     *
169     * @see MemberNode#accept(ParseTreeVisitor)
170     */
171    T visit(MemberNode memberNode);
172
173    /**
174     * Visits a literal.
175     *
176     * @param literalNode Node representing a Literal
177     *
178     * @return value yielded by visiting the node
179     *
180     * @see LiteralNode#accept(ParseTreeVisitor)
181     */
182    T visit(LiteralNode literalNode);
183
184    /**
185     * Visits a property-value pair.
186     *
187     * @param propertyValueNode Node representing a property-value pair
188     *
189     * @return value yielded by visiting the node
190     *
191     * @see PropertyValueNode#accept(ParseTreeVisitor)
192     */
193    T visit(PropertyValueNode propertyValueNode);
194}
195
196// End ParseTreeVisitor.java