/*
//
// Licensed to Benedikt Kämpgen under one or more contributor license
// agreements. See the NOTICE file distributed with this work for
// additional information regarding copyright ownership.
//
// Benedikt Kämpgen licenses this file to you under the Apache License,
// Version 2.0 (the "License"); you may not use this file except in
// compliance with the License. You may obtain a copy of the License at:
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
*/
package org.olap4j.driver.olap4ld;
import java.util.ArrayList;
import java.util.List;
import org.olap4j.OlapException;
import org.olap4j.Position;
import org.olap4j.mdx.AxisNode;
import org.olap4j.mdx.CallNode;
import org.olap4j.mdx.CubeNode;
import org.olap4j.mdx.DimensionNode;
import org.olap4j.mdx.DrillThroughNode;
import org.olap4j.mdx.HierarchyNode;
import org.olap4j.mdx.IdentifierNode;
import org.olap4j.mdx.LevelNode;
import org.olap4j.mdx.LiteralNode;
import org.olap4j.mdx.MemberNode;
import org.olap4j.mdx.ParameterNode;
import org.olap4j.mdx.ParseTreeVisitor;
import org.olap4j.mdx.PropertyValueNode;
import org.olap4j.mdx.SelectNode;
import org.olap4j.mdx.WithMemberNode;
import org.olap4j.mdx.WithSetNode;
import org.olap4j.metadata.Hierarchy;
import org.olap4j.metadata.Measure;
import org.olap4j.metadata.Member;
public class AxisPositionListVisitor<T> implements ParseTreeVisitor<T> {
/*
* The positions used in an axis
*/
List<Position> positions = new ArrayList<Position>();
/*
* The list of hierarchies used in an axis, the dimensionality in terms of hierarchies
*/
List<Hierarchy> hierarchyList = new ArrayList<Hierarchy>();
/*
* The list of measures used in an axis
*/
List<Measure> measureList = new ArrayList<Measure>();
List<Olap4ldCellSetMemberProperty> propertyList = new ArrayList<Olap4ldCellSetMemberProperty>();
private String operatorName;
@Override
public T visit(SelectNode selectNode) {
// TODO Auto-generated method stub
return null;
}
@Override
public T visit(AxisNode axis) {
return null;
}
@Override
public T visit(WithMemberNode calcMemberNode) {
// TODO Auto-generated method stub
return null;
}
@Override
public T visit(WithSetNode calcSetNode) {
// TODO Auto-generated method stub
return null;
}
/**
* Within the call node I distinguish between different functions, for each,
* I run another visitor to create the wanted result.
*/
public T visit(CallNode call) {
this.operatorName = call.getOperatorName();
return null;
}
@Override
public T visit(IdentifierNode id) {
// TODO Auto-generated method stub
return null;
}
@Override
public T visit(ParameterNode parameterNode) {
// TODO Auto-generated method stub
return null;
}
@Override
public T visit(CubeNode cubeNode) {
// TODO Auto-generated method stub
return null;
}
@Override
public T visit(DimensionNode dimensionNode) {
// TODO Auto-generated method stub
return null;
}
@Override
public T visit(HierarchyNode hierarchyNode) {
// TODO Auto-generated method stub
return null;
}
@Override
public T visit(LevelNode levelNode) {
if (operatorName.equals("Members")) {
/*
* Could I use the members information for creating the sparql
* query?
*/
try {
// Fill position list
List<Member> members = levelNode.getLevel().getMembers();
for (Member member : members) {
List<Member> positionMembers = new ArrayList<Member>();
positionMembers.add(member);
Olap4ldPosition aPosition = new Olap4ldPosition(
positionMembers, positions.size());
positions.add(aPosition);
// Add measure, if members of Measures
if (levelNode.getLevel().getName().equals("Measures")) {
measureList.add((Measure) member);
}
}
// Fill hierarchy list
hierarchyList.add(levelNode.getLevel().getHierarchy());
} catch (OlapException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return null;
}
/**
* If I visit a member node, I simply add it to the list.
*/
public T visit(MemberNode memberNode) {
List<Member> positionMembers = new ArrayList<Member>();
positionMembers.add(memberNode.getMember());
Olap4ldPosition aPosition = new Olap4ldPosition(positionMembers,
positions.size());
positions.add(aPosition);
// Fill hierarchy list
hierarchyList.add(memberNode.getMember().getLevel().getHierarchy());
// Fill measure list
measureList.add((Measure) memberNode.getMember());
return null;
}
@Override
public T visit(LiteralNode literalNode) {
// TODO Auto-generated method stub
return null;
}
@Override
public T visit(PropertyValueNode propertyValueNode) {
// TODO Auto-generated method stub
return null;
}
@Override
public T visit(DrillThroughNode drillThroughNode) {
// TODO Auto-generated method stub
return null;
}
}