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