Skip to content

Commit

Permalink
MONDRIAN
Browse files Browse the repository at this point in the history
       Produce the XMLA SlicerAxis.

[git-p4: depot-paths = "//open/mondrian/": change = 6284]
  • Loading branch information
Richard Emberson committed Apr 19, 2006
1 parent 31b7eef commit 598ab25
Showing 1 changed file with 142 additions and 9 deletions.
151 changes: 142 additions & 9 deletions src/main/mondrian/xmla/XmlaHandler.java
Expand Up @@ -134,13 +134,11 @@ private void checkFormat(XmlaRequest request) throws XmlaException {
new UnsupportedOperationException("<Format>: only 'Tabular' allowed when drilling through"));
}
} else {
//System.out.println("XmlaHandler.execute: TODO NOT checking format");
propertyName = PropertyDefinition.Format.name;
final String formatName = (String) request.getProperties().get(propertyName);
if (formatName != null) {
Enumeration.Format format = Enumeration.Format.getValue(formatName);
if (format != Enumeration.Format.Multidimensional) {
//System.out.println("XmlaHandler.execute: format NOT Enumeration.Format.Multidimensional");
throw new UnsupportedOperationException("<Format>: only 'Multidimensional' currently supported");
}
}
Expand All @@ -150,7 +148,6 @@ private void checkFormat(XmlaRequest request) throws XmlaException {
Enumeration.AxisFormat axisFormat = Enumeration.AxisFormat.getValue(axisFormatName);

if (axisFormat != Enumeration.AxisFormat.TupleFormat) {
//System.out.println("XmlaHandler.execute: axisFormat NOT Enumeration.AxisFormat.TupleFormat");
throw new UnsupportedOperationException("<AxisFormat>: only 'TupleFormat' currently supported");
}
}
Expand Down Expand Up @@ -968,6 +965,8 @@ private QueryResult executeQuery(XmlaRequest request)

static class MDDataSet implements QueryResult {
private final Result result;
private Hierarchy[] slicerAxisHierarchies;

private static final String[] cellProps = new String[] {
"Value",
"FmtValue",
Expand All @@ -982,7 +981,9 @@ static class MDDataSet implements QueryResult {
"LName",
"LNum",
"DisplayInfo",
"Depth"};
// Not is spec nor generated by SQL Server
//"Depth"
};
private static final String[] propLongs = new String[] {
Property.MEMBER_UNIQUE_NAME.name,
Property.MEMBER_CAPTION.name,
Expand All @@ -1002,6 +1003,19 @@ public void unparse(SaxWriter writer) throws SAXException {
}

private void olapInfo(SaxWriter writer) {
// What are all of the cube's hierachies
Cube cube = result.getQuery().getCube();
List hierarchyList = new ArrayList();
Dimension[] dimensions = cube.getDimensions();
for (int i = 0; i < dimensions.length; i++) {
Dimension dimension = dimensions[i];
Hierarchy[] hierarchies = dimension.getHierarchies();
for (int j = 0; j < hierarchies.length; j++) {
Hierarchy hierarchy = hierarchies[j];
hierarchyList.add(hierarchy);
}
}

writer.startElement("OlapInfo");
writer.startElement("CubeInfo");
writer.startElement("Cube");
Expand All @@ -1010,13 +1024,58 @@ private void olapInfo(SaxWriter writer) {
writer.endElement();
writer.endElement();
writer.endElement(); // CubeInfo

// create AxesInfo for axes
// -----------
writer.startElement("AxesInfo");
final Axis[] axes = result.getAxes();
axisInfo(writer, result.getSlicerAxis(), "SlicerAxis");
//axisInfo(writer, result.getSlicerAxis(), "SlicerAxis");
List axisHierarchyList = new ArrayList();
for (int i = 0; i < axes.length; i++) {
axisInfo(writer, axes[i], "Axis" + i);
Hierarchy[] hiers = axisInfo(writer, axes[i], "Axis" + i);
for (int j = 0; j < hiers.length; j++) {
axisHierarchyList.add(hiers[j]);
}

}
// Remove all seen axes.
// What this does is for each hierarchy in one of the
// axes, find its Dimension and then all of that Dimension's
// Hierarchies (most of the time you are back to the original
// Hierarchy) and then for each Hierarchy remove it from the
// list of all Hierarchies.
// NOTE: Don't know if this is correct!!
for (Iterator it1 = axisHierarchyList.iterator(); it1.hasNext();) {
Hierarchy hier1 = (Hierarchy) it1.next();
Dimension dim = hier1.getDimension();
Hierarchy[] hiers = dim.getHierarchies();
for (int i = 0; i < hiers.length; i++) {
Hierarchy h = hiers[i];
String uniqueName = h.getUniqueName();
for (Iterator it2 = hierarchyList.iterator(); it2.hasNext();) {
Hierarchy hier2 = (Hierarchy) it2.next();
if (uniqueName.equals(hier2.getUniqueName())) {
it2.remove();
break;
}
}
}
}

///////////////////////////////////////////////
// create AxesInfo for slicer axes
//
Hierarchy[] hierarchies =
(Hierarchy[]) hierarchyList.toArray(new Hierarchy[0]);
writer.startElement("AxisInfo",
new String[] { "name", "SlicerAxis"});
writeHierarchyInfo(writer, hierarchies);
writer.endElement(); // AxisInfo
slicerAxisHierarchies = hierarchies;
//
///////////////////////////////////////////////


writer.endElement(); // AxesInfo
// -----------
writer.startElement("CellInfo");
Expand All @@ -1031,7 +1090,11 @@ private void olapInfo(SaxWriter writer) {
writer.endElement(); // OlapInfo
}

private void axisInfo(SaxWriter writer, Axis axis, String axisName) {
private Hierarchy[] axisInfo(
SaxWriter writer,
Axis axis,
String axisName) {

writer.startElement("AxisInfo", new String[] { "name", axisName});

Hierarchy[] hierarchies;
Expand All @@ -1047,6 +1110,17 @@ private void axisInfo(SaxWriter writer, Axis axis, String axisName) {
//final QueryAxis queryAxis = this.result.getQuery().axes[i];
// TODO:
}

writeHierarchyInfo(writer, hierarchies);

writer.endElement(); // AxisInfo

return hierarchies;
}
private void writeHierarchyInfo(
SaxWriter writer,
Hierarchy[] hierarchies) {

for (int j = 0; j < hierarchies.length; j++) {
writer.startElement("HierarchyInfo", new String[] {
"name", hierarchies[j].getName()});
Expand All @@ -1057,16 +1131,44 @@ private void axisInfo(SaxWriter writer, Axis axis, String axisName) {
}
writer.endElement(); // HierarchyInfo
}
writer.endElement(); // AxisInfo
}

private void axes(SaxWriter writer) {
writer.startElement("Axes");
axis(writer, result.getSlicerAxis(), "SlicerAxis");
//axis(writer, result.getSlicerAxis(), "SlicerAxis");
final Axis[] axes = result.getAxes();
for (int i = 0; i < axes.length; i++) {
axis(writer, axes[i], "Axis" + i);
}

////////////////////////////////////////////
// now generate SlicerAxis information
//
Hierarchy[] hierarchies = slicerAxisHierarchies;
writer.startElement("Axis", new String[] { "name", "SlicerAxis"});
writer.startElement("Tuples");
writer.startElement("Tuple");

for (int i = 0; i < hierarchies.length; i++) {
Hierarchy hierarchy = hierarchies[i];
Member member = hierarchy.getDefaultMember();
if (member != null) {
slicerAxis(writer, member);
} else {
LOGGER.warn("Can not create SlicerAxis: " +
"null default member for Hierarchy " +
hierarchy.getUniqueName());
}
}
//
////////////////////////////////////////////

writer.endElement(); // Tuple
writer.endElement(); // Tuples
writer.endElement(); // Axis



writer.endElement(); // Axes
}

Expand Down Expand Up @@ -1110,6 +1212,37 @@ private void axis(SaxWriter writer, Axis axis, String axisName) {
writer.endElement(); // Tuples
writer.endElement(); // Axis
}
private void slicerAxis(SaxWriter writer, Member member) {
writer.startElement("Member", new String[] {
"Hierarchy", member.getHierarchy().getName()});
for (int m = 0; m < props.length; m++) {
Object value = null;
if (propLongs[m].equals(Property.DISPLAY_INFO.name)) {
Integer childrenCard =
(Integer) member.getPropertyValue(Property.CHILDREN_CARDINALITY.name);
// NOTE: don't know if this is correct for
// SlicerAxis
int displayInfo = 0xffff & childrenCard.intValue();
/*
int displayInfo =
calculateDisplayInfo((j == 0 ? null : positions[j - 1]),
(j + 1 == positions.length ? null : positions[j + 1]),
member, k, childrenCard.intValue());
*/
value = new Integer(displayInfo);
} else if (propLongs[m].equals(Property.DEPTH.name)) {
value = new Integer(member.getDepth());
} else {
value = member.getPropertyValue(propLongs[m]);
}
if (value != null) {
writer.startElement(props[m]); // Properties
writer.characters(value.toString());
writer.endElement(); // Properties
}
}
writer.endElement(); // Member
}

private int calculateDisplayInfo(Position prevPosition, Position nextPosition,
Member currentMember, int memberOrdinal, int childrenCount) {
Expand Down

0 comments on commit 598ab25

Please sign in to comment.