1 13 14 package mondrian.olap; 15 16 import java.util.Iterator ; 17 import java.util.List ; 18 import org.apache.log4j.Logger; 19 import java.io.PrintWriter ; 20 21 28 public abstract class ResultBase implements Result { 29 protected final Query query; 30 protected final Axis[] axes; 31 protected Axis slicerAxis; 32 33 protected ResultBase(Query query, Axis[] axes) { 34 this.query = query; 35 this.axes = axes; 36 } 37 38 protected abstract Logger getLogger(); 39 40 public Query getQuery() { 41 return query; 42 } 43 44 public Axis[] getAxes() { 46 return axes; 47 } 48 public Axis getSlicerAxis() { 50 return slicerAxis; 51 } 52 public void print(PrintWriter pw) { 54 for (int i = -1; i < axes.length; i++) { 55 pw.println("Axis #" + (i + 1) + ":"); 56 printAxis(pw, i < 0 ? slicerAxis : axes[i]); 57 } 58 int[] pos = new int[axes.length]; 62 printRows(pw, axes.length - 1, pos); 63 } 64 private void printRows(PrintWriter pw, int axis, int[] pos) { 65 Axis _axis = axis < 0 ? slicerAxis : axes[axis]; 66 List <Position> positions = _axis.getPositions(); 67 int i = 0; 68 for (Position position: positions) { 69 if (axis < 0) { 70 if (i > 0) { 71 pw.print(", "); 72 } 73 printCell(pw, pos); 74 } else { 75 pos[axis] = i; 76 if (axis == 0) { 77 int row = axis + 1 < pos.length ? pos[axis + 1] : 0; 78 pw.print("Row #" + row + ": "); 79 } 80 printRows(pw, axis - 1, pos); 81 if (axis == 0) { 82 pw.println(); 83 } 84 } 85 i++; 86 } 87 107 } 108 private void printAxis(PrintWriter pw, Axis axis) { 109 List <Position> positions = axis.getPositions(); 110 for (Position position: positions) { 111 boolean firstTime = true; 112 pw.print("{"); 113 for (Member member: position) { 114 if (! firstTime) { 115 pw.print(", "); 116 } 117 pw.print(member.getUniqueName()); 118 firstTime = false; 119 } 120 pw.println("}"); 121 } 122 } 123 private void printCell(PrintWriter pw, int[] pos) { 124 Cell cell = getCell(pos); 125 pw.print(cell.getFormattedValue()); 126 } 127 128 131 public Member getMember(int[] pos, Dimension dimension) { 132 for (int i = -1; i < axes.length; i++) { 133 Axis axis = slicerAxis; 134 int index = 0; 135 if (i >= 0) { 136 axis = axes[i]; 137 index = pos[i]; 138 } 139 List <Position> positions = axis.getPositions(); 140 Position position = positions.get(index); 141 for (Member member: position) { 142 if (member.getDimension() == dimension) { 143 return member; 144 } 145 } 146 } 147 return dimension.getHierarchy().getDefaultMember(); 148 } 149 150 public void close() { 151 } 152 } 153 154 155 | Popular Tags |