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