001    /*
002    // $Id: DrillDownOnPositionTransform.java 243 2009-05-22 07:21:37Z 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) 2008-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.transform;
011    
012    import java.util.List;
013    
014    import org.olap4j.Axis;
015    import org.olap4j.CellSet;
016    import org.olap4j.Position;
017    import org.olap4j.mdx.AxisNode;
018    import org.olap4j.mdx.CallNode;
019    import org.olap4j.mdx.CubeNode;
020    import org.olap4j.mdx.DimensionNode;
021    import org.olap4j.mdx.HierarchyNode;
022    import org.olap4j.mdx.IdentifierNode;
023    import org.olap4j.mdx.LevelNode;
024    import org.olap4j.mdx.LiteralNode;
025    import org.olap4j.mdx.MemberNode;
026    import org.olap4j.mdx.ParameterNode;
027    import org.olap4j.mdx.ParseTreeNode;
028    import org.olap4j.mdx.ParseTreeVisitor;
029    import org.olap4j.mdx.PropertyValueNode;
030    import org.olap4j.mdx.SelectNode;
031    import org.olap4j.mdx.WithMemberNode;
032    import org.olap4j.mdx.WithSetNode;
033    import org.olap4j.metadata.Member;
034    
035    /**
036     * Drill down on position transform
037     *
038     * TODO: transform to be completed, not working for now.
039     *
040     * <p>Description: Adds the children of a member at a specific position on an
041     * axis. The member to drill is identified from a CellSet with the axis,
042     * positionOrdinalInAxis and memberOrdinalInPosition arguments. The drilled
043     * member will still be present on the axis, in addition to its children. It
044     * is recommended to apply a Hierarchize transform to the same axis of the
045     * resulting query, in order to have members in correct hierarchical order.
046     *
047     * <p>Example of use: the user clicks on a member in a crosstab axis, in order
048     * to see its children in addition to the member itself.
049     *
050     * <p>Applicability: this transform is applicable only to members in a query
051     * that are drillable, i.e. non-leaf members. The CellSet resulting from the
052     * execution of the initial MDX query must also be available.
053     *
054     * @author etdub
055     * @author jhyde
056     * @version $Id: DrillDownOnPositionTransform.java 243 2009-05-22 07:21:37Z jhyde $
057     * @since Jul 30, 2008
058     */
059    public class DrillDownOnPositionTransform extends AxisTransform {
060    
061        // private final int positionOrdinalInAxis;
062        // private final int memberOrdinalInPosition;
063        // private final CellSet cellSet;
064    
065        private final Position positionToDrill;
066        private final Member memberToDrill;
067        private final List<Member> pathToMember;
068    
069        /**
070         * ctor
071         *
072         * @param axis
073         * @param positionOrdinalInAxis
074         * @param memberOrdinalInPosition
075         * @param cellSet
076         */
077        public DrillDownOnPositionTransform(
078            Axis axis,
079            int positionOrdinalInAxis,
080            int memberOrdinalInPosition,
081            CellSet cellSet)
082        {
083            super(axis);
084            // this.positionOrdinalInAxis = positionOrdinalInAxis;
085            // this.memberOrdinalInPosition = memberOrdinalInPosition;
086            // this.cellSet = cellSet;
087    
088            positionToDrill =
089                TransformUtil.getPositionFromCellSet(
090                    axis, positionOrdinalInAxis, cellSet);
091            memberToDrill = TransformUtil.getMemberFromCellSet(
092                axis, positionOrdinalInAxis, memberOrdinalInPosition, cellSet);
093            pathToMember = TransformUtil.getPathToMember(
094                positionToDrill,
095                memberOrdinalInPosition);
096        }
097    
098        public String getName() {
099            return "Drill down a member on a specific position";
100        }
101    
102        public String getDescription() {
103            return "Expand a member on a position by adding its children";
104        }
105    
106        @Override
107        protected ParseTreeNode processAxisExp(ParseTreeNode exp) {
108            // TODO: implement me!
109    
110            return null;
111        }
112    
113    
114        // visitor for a tree of expressions inside a query axis
115        // (not sure this should go here)
116        class DrillDownOnPositionVisitor
117            implements ParseTreeVisitor<ParseTreeNode>
118        {
119    
120            public ParseTreeNode visit(SelectNode selectNode) {
121                // TODO Auto-generated method stub
122                return null;
123            }
124    
125            public ParseTreeNode visit(AxisNode axis) {
126                // TODO Auto-generated method stub
127                return null;
128            }
129    
130            public ParseTreeNode visit(WithMemberNode calcMemberNode) {
131                // TODO Auto-generated method stub
132                return null;
133            }
134    
135            public ParseTreeNode visit(WithSetNode calcSetNode) {
136                // TODO Auto-generated method stub
137                return null;
138            }
139    
140            public ParseTreeNode visit(CallNode call) {
141                // TODO Auto-generated method stub
142                return null;
143            }
144    
145            public ParseTreeNode visit(IdentifierNode id) {
146                // TODO Auto-generated method stub
147                return null;
148            }
149    
150            public ParseTreeNode visit(ParameterNode parameterNode) {
151                // TODO Auto-generated method stub
152                return null;
153            }
154    
155            public ParseTreeNode visit(CubeNode cubeNode) {
156                // TODO Auto-generated method stub
157                return null;
158            }
159    
160            public ParseTreeNode visit(DimensionNode dimensionNode) {
161                // TODO Auto-generated method stub
162                return null;
163            }
164    
165            public ParseTreeNode visit(HierarchyNode hierarchyNode) {
166                // TODO Auto-generated method stub
167                return null;
168            }
169    
170            public ParseTreeNode visit(LevelNode levelNode) {
171                // TODO Auto-generated method stub
172                return null;
173            }
174    
175            public ParseTreeNode visit(MemberNode memberNode) {
176                // TODO Auto-generated method stub
177                return null;
178            }
179    
180            public ParseTreeNode visit(LiteralNode literalNode) {
181                // TODO Auto-generated method stub
182                return null;
183            }
184    
185            public ParseTreeNode visit(PropertyValueNode propertyValueNode) {
186                // TODO Auto-generated method stub
187                return null;
188            }
189        }
190    
191    }
192    
193    // End DrillDownOnPositionTransform.java