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