📄 resultbase.java
字号:
});
printPosList(posList, new PrintWriter(System.out), "Step 3 sortPosList " + iDim);
// last step
// sort sublists next hierarchy
if (iDim == nDim - 1)
return posList;
List newPosList = new ArrayList();
List subList = new ArrayList();
Member first = null;
for (Iterator iter = posList.iterator(); iter.hasNext();) {
PositionBase pb = (PositionBase) iter.next();
if (first == null) {
first = pb.getMembers()[iDim];
subList.add(pb);
} else {
Member current = pb.getMembers()[iDim];
if (current.equals(first)) {
subList.add(pb);
} else {
subList = sortPosList(subList, iDim + 1, nDim);
newPosList.addAll(subList);
subList.clear();
first = current;
subList.add(pb);
}
}
}
if (subList.size() > 1) {
subList = sortPosList(subList, iDim + 1, nDim);
}
newPosList.addAll(subList);
printPosList(newPosList, new PrintWriter(System.out), "End sortPosList " + iDim);
return newPosList;
}
/**
* print position list for debugging
*/
private void printPosList(List posList, PrintWriter wout, String label) {
wout.println(label);
int n = 0;
for (Iterator iter = posList.iterator(); iter.hasNext(); n++) {
PositionBase pb = (PositionBase) iter.next();
Member[] members = pb.getMembers();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < members.length; i++) {
if (i == 0) {
sb.append(n);
sb.append(" ");
sb.append(pb.number);
sb.append(" ");
} else {
sb.append(" * ");
}
sb.append(members[i].getLabel());
}
wout.println(sb.toString());
}
wout.flush();
}
/**
* @param iFull
* full index array
* @param iSlice
* slice index array
* @param iAxis -
* index beeing omitted
*/
private void full2slice(int[] iFull, int[] iSlice, int iAxis) {
if (iSlice.length == 0)
return; // 1-dimensional
int j = 0;
for (int i = 0; i < iFull.length; i++) {
if (i != iAxis)
iSlice[j++] = iFull[i];
}
}
/**
* @param iFull
* full index array
* @param iSlice
* slice index array
* @param iAxis -
* index beeing omitted
*/
private void slice2full(int[] iSlice, int[] iFull, int iAxis, int iAxisVal) {
if (iSlice.length == 0) {
iFull[0] = iAxisVal;
return;
}
int j = 0;
for (int i = 0; i < iFull.length; i++) {
if (i != iAxis)
iFull[i] = iSlice[j++];
else
iFull[i] = iAxisVal;
}
}
/**
* linear index from index array
*
* @param iar
* @return
*/
private int lindex(int[] iar, int[] ni) {
// 3 dim sample
// c000 c001 ... c00n ck00 ck01 ... ck01
// c010 c011 ... c01n ---> ck10 ck11 ... ck1n
// ...
// c0m1 c0m2 ... c0mn ckm1 ckm2 ckmn
/* kk*(n+1)*(m+1) + mm*(n+1) +nn */
int k = iar[0];
for (int j = 1; j < iar.length; j++)
k = k * (ni[j - 1] + 1) + iar[j];
return k;
}
/**
* @see com.tonbeller.jpivot.olap.model.Decorator#getRootDecoree()
*/
public Object getRootDecoree() {
return this;
}
/**
* @see com.tonbeller.jpivot.olap.model.Visitable#accept
*/
public void accept(Visitor visitor) {
visitor.visitResult(this);
}
/**
* Render Test Output to HTML
*/
public static void renderHtml(Result result, String mdx, String outfile) throws IOException {
int i;
PrintWriter wout = new PrintWriter(new BufferedWriter(new FileWriter(outfile)));
Axis[] axes = result.getAxes();
wout.println("<HTML>");
wout.println("<HEAD>");
wout.println("<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=iso-8859-1\">");
wout.println("<TITLE>Result from MDX Query</TITLE>");
wout.println("</HEAD>");
wout.println("<BODY>");
wout.println("<h1>MDX Query Result</h1>");
//String mdx = ((MdxOlapModel) model).getCurrentMdx();
if (mdx != null ) {
wout.println("<p>");
wout.println(mdx);
wout.println("</p>");
}
wout.println("<table border=\"3\">");
wout.println("<thead><tr>");
if (axes.length == 0) {
// result is 0 dimensional
wout.println("<th>Slicer</th><th>Result</th>");
wout.println("</thead><tbody><tr>");
// slicer members as row header
renderSlicerRowHeader(result.getSlicer(), wout);
Cell cell = (Cell) result.getCells().get(0);
String value = cell.getFormattedValue();
wout.println("<td>" + value + "</td>");
wout.println("</tr>");
} else if (axes.length == 1) {
// result is 1 dimensional
// print position of axis 0 as column headers
renderColHeaders(wout, axes[0]);
wout.println("</tr></thead>");
wout.println("<tbody><tr>");
// slicer members as row header
renderSlicerRowHeader(result.getSlicer(), wout);
int n = 0;
for (i = 0; i < axes[0].getPositions().size(); i++) {
Cell cell = (Cell) result.getCells().get(n++);
String value = cell.getFormattedValue();
wout.println("<td>" + value + "</td>");
}
wout.println("</tr>");
} else if( axes.length == 2 ) {
// assume 2 dimensional
// print position of axis 0 as column headers
renderColHeaders(wout, axes[0]);
wout.println("</tr></thead>");
// print rows, each one starting with row headers
wout.println("<tbody>");
Position[] positions = (Position[]) axes[1].getPositions().toArray(new Position[0]);
int n = 0;
for (i = 0; i < positions.length; i++) {
wout.println("<tr>");
Member[] members = positions[i].getMembers();
String caption = "";
for (int j = 0; j < members.length; j++) {
if (j > 0)
caption = caption + "<br>" + members[j].getLabel();
else
caption = members[j].getLabel();
}
wout.println("<th>" + caption + "</th>");
for (int j = 0; j < axes[0].getPositions().size(); j++) {
Cell cell = (Cell) result.getCells().get(n++);
String value = cell.getFormattedValue();
wout.println("<td>" + value + "</td>");
}
wout.println("</tr>");
}
} else {
// cannot handle more than 2 axes
throw new IllegalArgumentException("ResultBase.renderHtml cannot handle more than 2 axes");
}
wout.println("</tbody>");
wout.println("</BODY></HTML>");
wout.close();
}
/**
* print column headers from axis
*/
private static void renderColHeaders(PrintWriter wout, Axis axis) {
// print position of axis as column headers
wout.println("<th></th>");
Position[] positions = (Position[]) axis.getPositions().toArray(new Position[0]);
for (int i = 0; i < positions.length; i++) {
Member[] members = positions[i].getMembers();
String caption = "";
for (int j = 0; j < members.length; j++) {
if (j > 0)
caption = caption + "<br>" + members[j].getLabel();
else
caption = members[j].getLabel();
}
wout.println("<th>" + caption + "</th>");
}
}
/**
* print row header from slicer axis
*/
private static void renderSlicerRowHeader(Axis slicerax, PrintWriter wout) {
Position[] positions = (Position[]) slicerax.getPositions().toArray(new Position[0]);
String caption = "";
for (int i = 0; i < positions.length; i++) {
Member[] members = positions[i].getMembers();
for (int j = 0; j < members.length; j++) {
if (j == 0 && i == 0)
caption = members[j].getLabel();
else
caption = caption + "<br>" + members[j].getLabel();
}
}
wout.println("<th>" + caption + "</th>");
}
/**
* print Result to print stream
*
* @param ps
* Output Print Stream
*/
public void printOut(java.io.PrintStream ps) {
Axis[] axes = this.getAxes();
for (int i = 0; i < axes.length; i++) {
Axis a = axes[i];
ps.println("Axis " + i);
printAxis(ps, a);
}
Axis slicer = this.getSlicer();
ps.println("Slicer Axis ");
printAxis(ps, slicer);
Iterator it = aCells.iterator();
int ic = 0;
while (it.hasNext()) {
Cell c = (Cell) it.next();
String val = c.getFormattedValue();
ps.println("Cell " + ic++ + " Value=" + val);
}
}
/**
* print axis to standard out
*/
private void printAxis(java.io.PrintStream ps, Axis a) {
List positions = a.getPositions();
Iterator it = positions.iterator();
int ip = 0;
while (it.hasNext()) {
Position p = (Position) it.next();
ps.println("Position " + ip++);
Member[] members = p.getMembers();
for (int j = 0; j < members.length; j++) {
Member m = members[j];
String mcap = m.getLabel();
int idep = m.getRootDistance();
ps.println("Member " + mcap + " depth=" + idep);
}
}
}
/**
* @return true, if the result was rolled back due to overflow condition
*/
public boolean isOverflowOccured() {
return overflow;
}
/**
* @return true, if the result was rolled back due to overflow condition
*/
public void setOverflowOccured(boolean overflow) {
this.overflow = overflow;
}
} // ResultBase
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -