1 16 package org.pentaho.data.connection.mdx; 17 18 import mondrian.olap.Member; 19 import mondrian.olap.Position; 20 import mondrian.olap.Result; 21 22 import org.pentaho.core.connection.AbstractPentahoMetaData; 23 24 30 public class MDXMetaData extends AbstractPentahoMetaData { 31 private static final int AXIS_COLUMN = 0; 32 private Object [][] columnHeaders; 33 private Object [][] rowHeaders; 34 35 private static final int AXIS_ROW = 1; 36 37 Result nativeResultSet = null; 38 39 42 public MDXMetaData(Result nativeResultSet) { 43 super(); 44 this.nativeResultSet = nativeResultSet; 45 columnHeaders = createColumnHeaders(); 46 rowHeaders = createRowHeaders(); 47 } 48 49 private Object [][] createColumnHeaders() { 50 Position[] positions = nativeResultSet.getAxes()[AXIS_COLUMN].positions; 51 int rowCount = positions[0].getMembers().length + 1; 52 int colCount = positions.length; 53 Object [][] result = new Object [rowCount][colCount]; 54 for (int c = 0; c < colCount; c++) { 55 Member[] members = positions[c].getMembers(); 56 Member member = null; 57 for (int r = 0; r < rowCount - 1; r++) { 58 member = members[r]; 59 result[r][c] = member.getCaption(); 60 } 61 result[rowCount - 1][c] = member.getHierarchy().getCaption(); 62 } 63 return result; 64 } 65 66 private Object [][] createRowHeaders() { 67 Position[] positions = nativeResultSet.getAxes()[AXIS_ROW].positions; 68 int rowCount = positions.length; 69 int colCount = positions[0].getMembers().length + 1; 70 Object [][] result = new Object [rowCount][colCount]; 71 for (int r = 0; r < rowCount; r++) { 72 Member[] members = positions[r].getMembers(); 73 Member member = null; 74 for (int c = 0; c < colCount - 1; c++) { 75 member = members[c]; 76 result[r][c] = member.getCaption(); 77 } 78 result[r][colCount - 1] = member.getHierarchy().getCaption(); 79 } 80 return result; 81 } 82 83 public String getColumnName(int columnNumber) { 84 if (nativeResultSet != null) { 85 Position[] positions = nativeResultSet.getAxes()[AXIS_ROW].positions; 87 if (columnNumber < positions[0].getMembers().length) { 88 Member member = positions[0].getMembers()[columnNumber]; 89 return member.getHierarchy().getCaption(); 90 } else { 91 return positions[0].getMembers()[positions[0].getMembers().length - 1].getHierarchy().getName(); 92 } 93 } 94 return ""; } 96 97 102 public int getColumnCount() { 103 return nativeResultSet.getAxes()[AXIS_COLUMN].positions.length; 104 } 105 106 111 public Object [][] getColumnHeaders() { 112 return columnHeaders; 113 } 114 115 120 public Object [][] getRowHeaders() { 121 return rowHeaders; 122 } 123 124 } 125 | Popular Tags |